在Python中使用正则表达式将“nnn0n”替换为“nnn1n”

2024-06-25 06:20:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用形式'nnn1n'的字符串替换形式'nnn0n'的字符串,其中n是任意数字。最简单的方法是什么?到目前为止,我尝试了以下方法:

int(re.sub(r'^(\d+?)(0)(\d)$', r'\1???\3', '7001')) 

但是我在'???'中插入的内容要么只是1要么\1返回不正确的结果。你知道吗

有什么想法吗?你知道吗

编辑:

我想出了一个丑陋的版本:

re.sub(r'a1a', '1', re.sub(r'^(\d+?)(0)(\d)$', r'\1a1a\3', '7001'))

有更好的吗?你知道吗


Tags: 方法字符串版本re编辑内容数字形式
3条回答

你可以这样做:

re.sub(r'^(\d{3})0(\d)$', r'\g<1>1\2', '7001')

或者,如果要替换的0之前不总是有三个数字:

re.sub(r'^(\d+)0(\d)$', r'\g<1>1\2', '1234509')

编辑如果您知道数字的格式始终相同,您可以使用:

re.sub(r'0(?=\d$)', '1', '7001')

你不需要正则表达式。你知道吗

replace = lambda x: '{0}1{1}'.format(x[:-2], x[-1]) if x[-2] == '0' else x
# or: x[:-2] + '1' + x[-1]
print replace('12345678901')

你可以用一个指定的小组来解决这个问题

int(re.sub(r'^(?P<prefix>\d+?)0(\d)$', r'\g<prefix>1\2', '7001'))

但最自然的方法可能是

int(re.sub(r'0(\d)$', r'1\1', '7001'))

相关问题 更多 >