from hwpapi import App
with App() as app:
app.new()
app.doc.insert_text("Hello world. Hello universe. Hello python.\n")
# 첫 번째 일치로 이동 (커서 이동; bool 반환)
found = app.doc.find_text("Hello")
print("find_text('Hello') →", found)
# 모든 일치 항목 바꾸기
count = app.doc.replace_all("Hello", "Hi")
print(f"replace_all('Hello' → 'Hi'): {count} replacements")찾기 및 바꾸기
단순한 replace_all 부터 중첩된 모양 제약까지
examples/find_replace.py + nbs/01_tutorials/02_find_and_replace.ipynb 에서 이식.
1. 단순 바꾸기
2. 상세한 FindReplace ParameterSet
와일드카드 / 대소문자 구분 / 단어 단위 등의 제약 조건이 필요할 때는 AllReplace 액션으로 내려가 그 ParameterSet 을 설정합니다.
from hwpapi import App
with App() as app:
app.new()
app.doc.insert_text("Old text. Some other text. Old text again.\n")
action = app.actions.AllReplace
ps = action.pset # FindReplace ParameterSet
ps.FindString = "Old"
ps.ReplaceString = "NEW"
ps.IgnoreCase = 0 # 대소문자 구분
ps.WholeWordOnly = 0
ps.UseWildCards = 0
action.run()
print("Replaced 'Old' → 'NEW' (case-sensitive)")3. 서식 제약 조건이 있는 찾기
FindReplace.find_char_shape 는 자동 생성되는 중첩 ParameterSet 입니다. 처음 접근할 때 내부적으로 CreateItemSet 을 호출하므로, 수동으로 구성할 필요가 없습니다.
from hwpapi import App
with App() as app:
app.new()
action = app.actions.FindReplace
ps = action.pset
ps.FindString = "important"
# 자동 생성 중첩 ParameterSet
ps.find_char_shape.Bold = True # BOLD 인 항목만 찾기
print("FindCharShape.Bold set:", ps.find_char_shape.Bold)
# action.run() 을 호출하면 실제로 텍스트를 찾음 — 여기선 건너뜀4. clone 을 이용한 스냅샷 / 복원
from hwpapi import App
with App() as app:
action = app.actions.FindReplace
ps = action.pset
original = ps.clone()
print("Snapshot:", repr(original))
ps.FindString = "temporary"
ps.IgnoreCase = 1
print("Changed:", repr(ps))
print("is_equivalent(original):", ps.is_equivalent(original))
ps.update_from(original)
print("Restored:", repr(ps))5. 어떤 find 계열 액션이 존재하는가?
from hwpapi import App
with App() as app:
for name in ['FindReplace', 'AllReplace', 'ForwardFind', 'BackwardFind']:
if name in app.actions:
cls = app.actions.get_pset_class(name)
desc = app.actions.get_description(name)
print(f"{name} → {cls.__name__ if cls else 'None'}: {desc}")