此问题在此处已有答案:
Handling backreferences to capturing groups in re.sub replacement pattern(2个答案)
昨天关门了。
我想以一种优雅的方式将前导零附加到字符串中找到的任何一位数字上。我尝试使用lookaheads和lookbehind来实现这一点(请参阅下面的代码),但似乎不起作用...
import re
print(re.sub('(?<!\d)(\d)(?!\d)', '0\1', 'GPIO_1')) # desired: GPIO_01 (getting something funny here)
print(re.sub('(?<!\d)(\d)(?!\d)', '0\1', 'GPIO_10')) # desired: GPIO_10 (no problem here)
print(re.sub('(?<!\d)(\d)(?!\d)', '0\1', 'GPIO_MAX')) # desired: GPIO_MAX (no problem here)
2条答案
按热度按时间xtupzzrd1#
您可以使用原始字符串替换正则表达式:
或者,对第一个捕获进行双转义,而不使用原始字符串:
wlzqhblo2#
在替换时使用原始字符串(这是所有正则表达式的良好做法)。
r'0\1'
。正则表达式需要一个反斜杠,但改为获取Unicode码位U+0001
的转义码(控制字符)。