Python 替换文件中的所有正则表达式匹配项
考虑一个基本的正则表达式,比如Python 替换文件中的所有正则表达式匹配项,python,regex,Python,Regex,考虑一个基本的正则表达式,比如a(+?)a。如何用第一组的内容替换文件中所有出现的正则表达式?sed 您是否仅限于使用Python工具?因为sed工作得很好 $ sed -i <filename> "s/a(.+?)a/\1/g" 请注意,许多正则表达式字符在Vim-\v设置“非常神奇”模式下转义,这样就不需要转义了。与“magic”(默认值)相同的命令是:%s/a\(.\+\?)a/\1/g python 如果您希望在Python中实现这一点,BigYellowCactus的答案
a(+?)a
。如何用第一组的内容替换文件中所有出现的正则表达式?sed
您是否仅限于使用Python工具?因为sed
工作得很好
$ sed -i <filename> "s/a(.+?)a/\1/g"
请注意,许多正则表达式字符在Vim-\v
设置“非常神奇”模式下转义,这样就不需要转义了。与“magic”(默认值)相同的命令是:%s/a\(.\+\?)a/\1/g
python
如果您希望在Python中实现这一点,BigYellowCactus的答案非常好(使用regex的re
模块和fileinput
修改文件)。use可以使用该模块在Python中使用正则表达式,并使用该模块简单地替换文件中的文本
示例:
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', '')
之前:
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!!!!!而这个应该消失了
你知道吗 之后:
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', '')
您好,这里是aShouldBeAMa
你知道吗
注意:这是因为参数
inplace=True
导致输入文件被移动到备份文件,并且标准输出被定向到输入文件,正如。您可以与版本>=6.0一起使用。从那时起,它就支持PCRE正则表达式
然后,您可以使用正则表达式
a(+?)a
并替换为$1
不,我不是,但仅限于Windows。@Paranaix,您有。或者,您可以在Vim中执行搜索和替换。作为对任何可能感到困惑的人的注意,for循环中的print
语句被重定向到该文件。(forfileinput
非常好)。这是预期的效果,尽管我在行中使用r.sub()
来保留行中不匹配的部分。这个python教程网站可能会有所帮助:他问起用python做这件事