Python string.replace正则表达式

Python string.replace正则表达式,python,regex,replace,Python,Regex,Replace,我有一个如下形式的参数文件: parameter-name parameter-value 其中参数可以是任意顺序,但每行只有一个参数。我想用新值替换一个参数的参数值 我使用一个line replace函数来替换使用Python函数的行。例如,我使用的正则表达式在vim中工作,但在string.replace()中似乎不起作用 下面是我正在使用的正则表达式: line.replace("^.*interfaceOpDataFile.*$/i", "interfaceOpDataFile %s"

我有一个如下形式的参数文件:

parameter-name parameter-value
其中参数可以是任意顺序,但每行只有一个参数。我想用新值替换一个参数的
参数值

我使用一个line replace函数来替换使用Python函数的行。例如,我使用的正则表达式在vim中工作,但在
string.replace()
中似乎不起作用

下面是我正在使用的正则表达式:

line.replace("^.*interfaceOpDataFile.*$/i", "interfaceOpDataFile %s" % (fileIn))
其中,
“InterfacePDataFile”
是我要替换的参数名(/I表示不区分大小写),新参数值是
文件in
变量的内容

有没有办法让Python识别此正则表达式,或者有其他方法来完成此任务?

str.replace()
|不识别正则表达式

要使用正则表达式执行替换,请使用
re.sub()
|

例如:

import re

line = re.sub(
           r"(?i)^.*interfaceOpDataFile.*$", 
           "interfaceOpDataFile %s" % fileIn, 
           line
       )
在循环中,最好先编译正则表达式:

import re

regex = re.compile(r"^.*interfaceOpDataFile.*$", re.IGNORECASE)
for line in some_file:
    line = regex.sub("interfaceOpDataFile %s" % fileIn, line)
    # do something with the updated line
您正在寻找函数

import re
s = "Example String"
replaced = re.sub('[ES]', 'a', s)
print replaced 

将打印
axample atring

re。sub
绝对是您需要的。所以你知道,你不需要锚和通配符

re.sub(r"(?i)interfaceOpDataFile", "interfaceOpDataFile %s" % filein, line)
将做同样的事情——匹配第一个子字符串,看起来像“InterfacePopDataFile”并替换它。

作为摘要

import sys
import re

f = sys.argv[1]
find = sys.argv[2]
replace = sys.argv[3]
with open (f, "r") as myfile:
     s=myfile.read()
ret = re.sub(find,replace, s)   # <<< This is where the magic happens
print ret
导入系统 进口稀土 f=sys.argv[1] find=sys.argv[2] replace=sys.argv[3] 打开(f,“r”)作为myfile: s=myfile.read()
ret=re.sub(查找、替换、替换)#我需要替换整行,因为原始文件将有如下内容:
interface-opdatafile-SomeDummyFile.txt
,我想将其替换为:
interface-opdatafile-someuseFulfillate.txt
如果我不包括锚,如何替换我知道我想摆脱它
SomeDummyFile.txt
?啊,我完全不明白你对替换品做了什么。如果每对都在自己的线上,您仍然不需要明确地使用锚
re.sub(r“(?i)(InterfacePDataFile)。*”,r'\1 UseFulfilline',line)
这将获取整行,捕获参数名称,并将其添加回替换项。我必须将
flags=re.MULTILINE
作为
re.sub
的最后一个参数传递给
,这是有道理的——regex编译是缓存的(),因此编译甚至没有必要。但正如您所展示的,如果一个人编译,就在循环外编译。对于任何想知道是否编译的详细信息的人,请检查。是否可以在一行中用大小写替换,例如,如果第一个字符是E,则将其更改为G,如果Z将其更改为B。您可以传递字符串->字符串函数作为
re.sub
的第二个参数。该函数将用每个匹配的子字符串调用,其结果将放入结果中。如果我们想要不区分大小写的替换,我们可以在搜索表达式之前使用r时,放入
replaced=re.sub('[ES]','a',s,flags=re.IGNORECASE)
。@Timo Regex通常包含反斜杠,这不应该“被Python”转义。