我的代码似乎无法正常运行:
x = "engniu4nwi5u"
print re.sub(r"\D(\d)\D", r"\1abc", x)
我期望的输出是:engniuabcnwiabcu
但是实际给出的输出是:engni4abcw5abc
您正在分组错误的字符,必须将其写为
>>> x = "engniu4nwi5u"
>>> re.sub(r"(\D)\d(\D)", r"\1abc\2", x)
'engniuabcnwiabcu'
(\D)
匹配非数字并捕获 \1
\d
匹配数字(\D)
匹配以下数字。捕获\2
它如何匹配?
engniu4nwi5u
|
\D => \1
engniu4nwi5u
|
\d
engniu4nwi5u
|
\D => \2
另一种解决方案
您也可以使用环顾四周
>>> x = "engniu4nwi5u"
>>> re.sub(r"(?<=\D)\d(?=\D)", r"abc", x)
'engniuabcnwiabcu'
(?<=\D)
回顾断言。检查数字是否以非数字开头。但不是虚假的\d
匹配数字(?=\D)
提前声明。检查数字后面是否跟有非数字。也没有被捕获。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句