考虑一个基本的正则表达式,例如a(.+?)a
. 如何用第一组的内容替换文件中该正则表达式的所有出现?
问问题
5867 次
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- \v
set “非常神奇”模式下被转义,这消除了转义的需要。与“魔术”(默认)相同的命令是:%s/a\(.\+\?)a/\1/g
Python
如果您想在 Python 中执行此操作,BigYellowCactus 的答案非常好(使用re
模块进行正则表达式,并fileinput
修改文件)。
于 2012-08-10T08:38:50.673 回答