我的代码似乎没有像预期的那样工作:
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)
向前看断言。检查数字后面是否跟着非数字。也没有被捕获。
关于python - python中的正则表达式似乎没有像我期望的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30149776/