
我真的很感激一些幫助。我正在處理大量已用 XML 腳本標記的文本,我需要整理一些內容。更具體地說,我需要刪除方括號中的數百個數字(即,如“[1234]”)(包括括號)。每個數字都不同,而這些數字可以是 3 到 5 位數字。
我需要做的第二件事是在其他一些文字片段周圍放置 XML 標記。這些是圓括號中的名稱。即,像:
他(史密斯先生)說…
我想將其更改為:
他<annot> (Mr. Smith) </annot>
說...'。
我怎麼才能執行這兩項更改?
我已經嘗試使用擴展模式並蒐索“[.*]”,但它沒有返回任何結果。當我嘗試使用 RegEx 進行相同操作時,我得到了很多命中,但它似乎正在搜尋語料庫中的每個方括號。
答案1
方括號是正規表示式中的特殊標記(表示to[a-z]
範圍內的任何字元),因此您必須對它們進行轉義。a
z
您的搜尋表達式將變為\[\d+\]
(\d+
表示一位或多位數字)。但是您想僅用數字替換它。您需要使用括號設定一個捕獲組,並在替換表達式中引用它。您的設定變為:
- 搜尋:
\[(\d+)\]
- 用。
\1
至於你的第二個問題,我不確定我是否正確理解了你給出的上下文......如果括號之間只有名稱,你可以替換\([^\)]+\)
為<annot> \0 </annot>
,或者\(Mr\. [^\)]+\)
如果名稱前面帶有Mr.
。
詳細來說,它的工作方式是這樣的:
- 您搜尋的括號必須被轉義(因為它們通常用於定義捕獲組,因此您使用
\(
和\)
[^...]+
表示一個或多個字符,但不是...
- 因此,您的搜尋表達式是一個左括號,後面跟著任何不是右括號的字元(因此它應該與名稱相符),然後是右括號。
\0
表示替換區域中的整個搜尋表達式
如果您有要替換的這些名稱的列表,那麼您最好將\(whatever name\)
其用作搜尋表達式,如果沒有,則這是不可能的,因為您無法使用正則表達式「猜測」什麼是名稱,什麼不是。