如何仅替换使用python re.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\[

如何替换使用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\[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总是只有一个条目长(如果这是您的意思的话)。我(最终)在许多文件的循环中使用它,但目前只涉及到我自己的一个替换