首页 > 解决方案 > Python re.sub 如何将字符串中的每个 0 替换为 2 当旁边没有 1 时?

问题描述

我对正则表达式完全陌生,现在我有以下任务:

我有一个看起来像这样的字符串:001000X00X001X00X

现在我想用 2 替换每个 0,而它旁边没有没有被 X 分隔的 1,因此示例字符串应更改为:001000X22X001X22X

我试图使用这样的东西来做到这一点:

s = re.sub(r'X0+X', 'X2+X', s);

因此它会搜索以 X 开头和结尾的子字符串,并且在它们之间有一个随机数的“0”,但显然每个像这样的子字符串都被更改为“X2+X”。如何计算 0 的数量并用 2 替换每一个?

标签: pythonregexre

解决方案


我太慢了,无法提供正则表达式答案(@Wiktor Stribiżew,你太快了!),所以这里有一个使用分割字符串作为中间的替代方法:

'X'.join([re.sub('0', '2', i) if not '1' in i else i for i in s.split('X')])

如果字符串只包含 0/1/X,这将是一个更简单/更快的选择:

'X'.join(['2'*len(i) if not '1' in i else i for i in s.split('X')])

注意。在@JvdV 的评论之后,这里是@WiktorStribiżew 的答案的修复:

re.sub(r'(?<=X)0+(?=X)', lambda x: '2'*len(x.group()), 'X'+s+'X')[1:-1]

输出:'22X001000X22X001X22X'


推荐阅读