正则表达式替换匹配模式的多个行

时间:2010-03-02 07:04:23

标签: regex

如果我有一堆这样的文字

The cat sat on the mat
Expropriations for international monetary exchange ( Currenncy: Dollars,
                                                     Value: 50,000)
The cat sat on the mat
Expropriations for international monetary exchange ( Currenncy: Yen)
The cat sat on the mat

我是否可以在文本编辑器(Jedit)的“查找/替换”功能中使用正则表达式来识别以单词Expropriations 开头的所有行和以右括号结束,然后将这些行放在方括号中,使它们看起来像这样:

The cat sat on the mat
[Expropriations for international monetary exchange ( Currenncy: Dollars,
                                                     Value: 50,000)]
The cat sat on the mat
[Expropriations for international monetary exchange ( Currenncy: Yen)]
The cat sat on the mat

棘手的是,右括号可能会落在与“征收”一词相同的行尾或下一行的末尾。 (在括号关闭之前,甚至可能有多行)

3 个答案:

答案 0 :(得分:2)

你可以匹配:

^(Expropriations[\d\D]*?\))

并将其替换为:

[$1]

\d\D匹配任何包含换行符的单个字符。

答案 1 :(得分:0)

如果您可以指定正则表达式选项,请尝试激活“单行”。 这样,正则表达式不关心换行符。

答案 2 :(得分:0)

Jedit是否支持使用多行正则表达式进行搜索和替换?

以下是使用python脚本实现此目的的方法。

要点是设置正则表达式的DOTALL('s')和MULTILINE('m')标志。

import re
str = """The cat sat on the mat
Expropriations for international monetary exchange ( Currenncy: Dollars,
                                                     Value: 50,000)
The cat sat on the mat
Expropriations for international monetary exchange ( Currenncy: Yen)
The cat sat on the mat"""

regex = re.compile(r'^(Expropriations.*?\))', re.S|re.M)
replaced = re.sub(regex, '[\\1]', str)
print replaced
  猫坐在垫子上       [国际货币兑换的征收(Currenncy:Dollars,
                                                           价值:50,000)]
      猫坐在垫子上       [国际货币兑换征收(Currenncy:Yen)]
      猫坐在垫子上