如何仅替换使用python re.findall而不是整个字符串找到的元素?
如何替换使用python正则表达式findall方法找到的组,而不必更改字符串的其余部分 例如:如何仅替换使用python re.findall而不是整个字符串找到的元素?,python,regex,Python,Regex,如何替换使用python正则表达式findall方法找到的组,而不必更改字符串的其余部分 例如: import re repl1='k1' repl2='k2' pattern=re.compile('CN=Root,Model=.*,Vector=Reactions\[(.*)\],ParameterGroup=Parameters,Parameter=(.*),Reference=Value') input= 'CN=Root,Model=Model1,Vector=Reactions\[
import re
repl1='k1'
repl2='k2'
pattern=re.compile('CN=Root,Model=.*,Vector=Reactions\[(.*)\],ParameterGroup=Parameters,Parameter=(.*),Reference=Value')
input= 'CN=Root,Model=Model1,Vector=Reactions\[k10],ParameterGroup=Parameters,Parameter=k12,Reference=Value')
我希望使用re.sub仅将(.*)
中的元素替换为repl1
和repl1
,而不必更改字符串的其余部分
-------编辑-----
我想要的输出应该如下所示:
output = 'CN=Root,Model=.*,Vector=Reactions[k1],ParameterGroup=Parameters,Parameter=k2,Reference=Value')
但请注意,我将'.'
放在模型之后,因为每次都会更改。也就是说,这可以是任何东西
----------编辑2----------
输入是一个简单的单行,在模式中几乎完全相同。例如:
import re
repl1='k1'
repl2='k2'
pattern=re.compile('CN=Root,Model=.*,Vector=Reactions\[(.*)\],ParameterGroup=Parameters,Parameter=(.*),Reference=Value')
input= 'CN=Root,Model=Model1,Vector=Reactions\[k10],ParameterGroup=Parameters,Parameter=k12,Reference=Value')
re.sub
的参数repl
可以是一个单参数函数,在这种情况下,将使用match对象作为参数调用它。因此,如果您确保模式的所有部分都在一个组中,那么您应该拥有用新字符串替换旧字符串所需的所有信息
import re
repl1='k1'
repl2='k2'
pattern=re.compile('(CN=Root,Model=.*,Vector=Reactions\[)(.*)(\],ParameterGroup=Parameters,Parameter=)(.*)(,Reference=Value)')
target = 'CN=Root,Model=something,Vector=Reactions[somethingelse],ParameterGroup=Parameters,Parameter=1234,Reference=Value'
现在定义一个函数,用于生成匹配字符串,其中组1和组3替换为所需的值:
def repl(m):
g = list(m.groups())
g[1] = repl1
g[3] = repl2
return "".join(g)
将此函数作为第一个参数传递给re.sub
,以实现所需的转换:
pattern.sub(repl, target)
给出了结果
'CN=Root,Model=something,Vector=Reactions[k1],ParameterGroup=Parameters,Parameter=k2,Reference=Value'
re.sub
的参数repl
可以是一个单参数函数,在这种情况下,将使用match对象作为参数调用它。因此,如果您确保模式的所有部分都在一个组中,那么您应该拥有用新字符串替换旧字符串所需的所有信息
import re
repl1='k1'
repl2='k2'
pattern=re.compile('(CN=Root,Model=.*,Vector=Reactions\[)(.*)(\],ParameterGroup=Parameters,Parameter=)(.*)(,Reference=Value)')
target = 'CN=Root,Model=something,Vector=Reactions[somethingelse],ParameterGroup=Parameters,Parameter=1234,Reference=Value'
现在定义一个函数,用于生成匹配字符串,其中组1和组3替换为所需的值:
def repl(m):
g = list(m.groups())
g[1] = repl1
g[3] = repl2
return "".join(g)
将此函数作为第一个参数传递给re.sub
,以实现所需的转换:
pattern.sub(repl, target)
给出了结果
'CN=Root,Model=something,Vector=Reactions[k1],ParameterGroup=Parameters,Parameter=k2,Reference=Value'
re.sub
的参数repl
可以是一个单参数函数,在这种情况下,将使用match对象作为参数调用它。因此,如果您确保模式的所有部分都在一个组中,那么您应该拥有用新字符串替换旧字符串所需的所有信息
import re
repl1='k1'
repl2='k2'
pattern=re.compile('(CN=Root,Model=.*,Vector=Reactions\[)(.*)(\],ParameterGroup=Parameters,Parameter=)(.*)(,Reference=Value)')
target = 'CN=Root,Model=something,Vector=Reactions[somethingelse],ParameterGroup=Parameters,Parameter=1234,Reference=Value'
现在定义一个函数,用于生成匹配字符串,其中组1和组3替换为所需的值:
def repl(m):
g = list(m.groups())
g[1] = repl1
g[3] = repl2
return "".join(g)
将此函数作为第一个参数传递给re.sub
,以实现所需的转换:
pattern.sub(repl, target)
给出了结果
'CN=Root,Model=something,Vector=Reactions[k1],ParameterGroup=Parameters,Parameter=k2,Reference=Value'
re.sub
的参数repl
可以是一个单参数函数,在这种情况下,将使用match对象作为参数调用它。因此,如果您确保模式的所有部分都在一个组中,那么您应该拥有用新字符串替换旧字符串所需的所有信息
import re
repl1='k1'
repl2='k2'
pattern=re.compile('(CN=Root,Model=.*,Vector=Reactions\[)(.*)(\],ParameterGroup=Parameters,Parameter=)(.*)(,Reference=Value)')
target = 'CN=Root,Model=something,Vector=Reactions[somethingelse],ParameterGroup=Parameters,Parameter=1234,Reference=Value'
现在定义一个函数,用于生成匹配字符串,其中组1和组3替换为所需的值:
def repl(m):
g = list(m.groups())
g[1] = repl1
g[3] = repl2
return "".join(g)
将此函数作为第一个参数传递给re.sub
,以实现所需的转换:
pattern.sub(repl, target)
给出了结果
'CN=Root,Model=something,Vector=Reactions[k1],ParameterGroup=Parameters,Parameter=k2,Reference=Value'
一个例子和预期的输出会更好。没问题-我做了一些编辑,repl1
和repl2
应该总是各有一个替换项,或者您打算如何区分何时应该替换它们?是的,repl1和repl2总是只有一个项长(如果这是您的意思的话)。我在许多文件的循环中使用它(最终)但是现在只考虑一次替换一个示例以及预期的输出会更好。没问题-我做了一些编辑应该总是每个repl1
和repl2
都有一次替换,或者您打算如何区分何时应该替换它们??是的,repl1和repl2总是只有一个条目长(如果这是您的意思的话)。我在许多文件的循环中使用它(最终)但是现在只考虑一次替换一个示例以及预期的输出会更好。没问题-我做了一些编辑应该总是每个repl1
和repl2
都有一次替换,或者您打算如何区分何时应该替换它们??是的,repl1和repl2总是只有一个条目长(如果这是您的意思的话)。我在许多文件的循环中使用它(最终)但是现在只考虑一次替换一个示例以及预期的输出会更好。没问题-我做了一些编辑应该总是每个repl1
和repl2
都有一次替换,或者您打算如何区分何时应该替换它们??是的,repl1和repl2总是只有一个条目长(如果这是您的意思的话)。我(最终)在许多文件的循环中使用它,但目前只涉及到我自己的一个替换