2

考虑一个基本的正则表达式,例如a(.+?)a. 如何用第一组的内容替换文件中该正则表达式的所有出现?

4

3 回答 3

5

使用可以使用re模块来使用python中的正则表达式和fileinput模块来简单地替换文件中的文本


例子:

import fileinput
import re

fn = "test.txt" # your filename

r = re.compile('a(.+?)a')
for line in fileinput.input(fn, inplace=True):
  match = r.match(line)
  print match.group() if match else line.replace('\n', '')

前:

你好这个
aShouldBeAMatch!!!!!!这应该消失了
,你知道 的

后:

你好,这
应该是
你知道 的


注意:这是有效的,因为参数inplace=True导致输入文件被移动到备份文件,并且标准输出被定向到输入文件,如可选就地过滤所述。

于 2012-08-10T08:46:20.593 回答
0

您可以使用版本 >= 6.0 的Notepad++ 。从那时起,它确实支持 PCRE 正则表达式。

然后您可以使用您的正则表达式a(.+?)a并替换为$1

于 2012-08-10T08:50:48.313 回答
-2

sed

您是否仅限于使用 Python 工具?因为sed效果很好。

$ sed -i <filename> "s/a(.+?)a/\1/g"

维姆

在 Vim 窗口中,给出以下搜索和替换 ex 命令:

:%s/\va(.+?)a/\1/g

请注意,许多正则表达式字符在 Vim- \vset “非常神奇”模式下被转义,这消除了转义的需要。与“魔术”(默认)相同的命令是:%s/a\(.\+\?)a/\1/g

Python

如果您想在 Python 中执行此操作,BigYellowCactus 的答案非常好(使用re模块进行正则表达式,并fileinput修改文件)。

于 2012-08-10T08:38:50.673 回答