非常感谢您的帮助。我正在处理大量已用 XML 脚本标记的文本,我需要整理一些内容。更具体地说,方括号中有数百个数字(例如“[1234]”),我需要删除这些数字(包括括号)。每个数字都不同,这些数字可以是 3 到 5 位数字。
我需要做的第二件事是将 XML 标签放在其他一些文本周围。这些是圆括号中的名称。例如:
他说(史密斯先生)......
我想将其更改为:
他<annot> (Mr. Smith) </annot>
说...'。
我怎样才能完成这两项更改?
我已经尝试使用扩展模式搜索“[.*]”,但没有返回任何结果。当我使用 RegEx 尝试相同操作时,我得到了很多结果,但它似乎在搜索语料库中的每个方括号。
答案1
方括号是正则表达式中的特殊标记([a-z]
表示范围内的任何字符a
)z
,因此您必须对其进行转义。
您的搜索表达式将变成\[\d+\]
(\d+
表示一个或多个数字)。但是,您想用数字单独替换它。您需要使用括号设置捕获组,并在替换表达式中引用它。您的设置将变成:
- 搜索:
\[(\d+)\]
- 用。。。来代替:
\1
至于您的第二个问题,我不确定我是否正确理解了您给出的上下文......如果只有名称在括号之间,您可以用 替换\([^\)]+\)
,<annot> \0 </annot>
或者\(Mr\. [^\)]+\)
如果名称前面有Mr.
。
具体来说,它的工作方式如下:
- 您搜索的括号必须转义(因为它们通常用于定义捕获组,因此您使用
\(
和\)
[^...]+
表示一个或多个不...
- 因此,您的搜索表达式是一个左括号,后跟任何不是右括号的字符(因此它应该与名称匹配),后跟右括号。
\0
表示替换区域中的整个搜索表达式
如果您有一个要替换的名称列表,那么您最好用它\(whatever name\)
作为搜索表达式,如果没有,那么这是不可能的,因为您无法让正则表达式“猜测”什么是名称,什么不是名称。