Python 替换re.sub()中相同的非字母数字字符
我正在使用Python 替换re.sub()中相同的非字母数字字符,python,regex,Python,Regex,我正在使用\W{}\W.format(sigs)查找一些变量并用其他变量替换它们。替换之后,我想恢复以前存在的相同的非字母数字字符 当我这样做时: sigs = 'v__a' CondStr = "(1 & v__a) == 0" CondStr = re.sub("\W{}\W".format(sigs), "\Wz3Sigs\W", CondStr) print CondStr 正如预期的那样,我得到的输出为(1&\Wz3Sigs\W==0,而实际上我希望输出为(1&z3Sigs)
\W{}\W.format(sigs)
查找一些变量并用其他变量替换它们。替换之后,我想恢复以前存在的相同的非字母数字字符
当我这样做时:
sigs = 'v__a'
CondStr = "(1 & v__a) == 0"
CondStr = re.sub("\W{}\W".format(sigs), "\Wz3Sigs\W", CondStr)
print CondStr
正如预期的那样,我得到的输出为(1&\Wz3Sigs\W==0
,而实际上我希望输出为(1&z3Sigs)==0
我怎样才能做到这一点呢?像这样的方法应该可以奏效
CondStr2=re.sub(“(\W){0}(\W)”.format(sigs),r“\1z3Sigs\2”,CondStr)
输出
>>> CondStr
'(1 & v__a) == 0'
>>> CondStr2
'(1 & z3Sigs) == 0'
您将
\W
分隔符分组,然后将其放回原位。请记住使用r'
将替换字符串设置为“原始”,否则替换的\
将被转义特殊序列\b
是合适的
CondStr = re.sub(r"\b{0}\b".format(sigs), "z3Sigs", CondStr)
您的预期输出是什么:
CondStr=“(1&v\a)==0”
?如果sigs
中没有匹配的内容,则不应该有任何替换。因此,在上述情况下,不应该有任何替换。sigs
是实际程序中的一个列表,那么您只需在此处使用str.replace
:CondStr.replace(sigs,“z3Sigs”)
replace的问题是,我的表达式中既有v_ua
又有v_uv_ua
,当我想更改第一个变量时,我不希望在第二秒内发生任何替换