我的代码似乎没有像预期的那样工作:
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)向前看断言。检查数字后是否跟有非数字。也没有被捕获。
