regex Python:如何优雅地在字符串中的一位数后面加上前导零?[duplicate]

brqmpdu1  于 2022-12-14  发布在  Python
关注(0)|答案(2)|浏览(138)

此问题在此处已有答案

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)
xtupzzrd

xtupzzrd1#

您可以使用原始字符串替换正则表达式:

print(re.sub('(?<!\d)(\d)(?!\d)', r'0\1', 'GPIO_1'))  # GPIO_01

或者,对第一个捕获进行双转义,而不使用原始字符串:

print(re.sub('(?<!\d)(\d)(?!\d)', '0\\1', 'GPIO_1'))  # GPIO_01
wlzqhblo

wlzqhblo2#

在替换时使用原始字符串(这是所有正则表达式的良好做法)。r'0\1'。正则表达式需要一个反斜杠,但改为获取Unicode码位U+0001的转义码(控制字符)。

相关问题