Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 替换文件中的所有正则表达式匹配项_Python_Regex - Fatal编程技术网

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
语句被重定向到该文件。(for
fileinput
非常好)。这是预期的效果,尽管我在行中使用
r.sub()
来保留行中不匹配的部分。这个python教程网站可能会有所帮助:他问起用python做这件事