Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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

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 替换re.sub()中相同的非字母数字字符_Python_Regex - Fatal编程技术网

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
,当我想更改第一个变量时,我不希望在第二秒内发生任何替换