我的代码似乎无法正常运行:
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)
预先声明。检查数字后面是否跟有非数字。也没有被捕获。