在re.sub()中替换相同的非字母数字字符

时间:2013-05-11 05:17:25

标签: 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) == 0

我怎样才能实现这一目标?

2 个答案:

答案 0 :(得分:0)

这样的事情应该有效

CondStr2 = re.sub("(\W){0}(\W)".format(sigs), r"\1z3Sigs\2", CondStr)

输出

>>> CondStr
'(1 & v__a) == 0'
>>> CondStr2
'(1 & z3Sigs) == 0'

您对\W分隔符进行分组,然后将它们放回去。记得使用r''使替换字符串“原始”,否则替换\将被转义

答案 1 :(得分:0)

特殊序列\b是合适的。

CondStr = re.sub(r"\b{0}\b".format(sigs), "z3Sigs", CondStr)