替换字符串中的所有重叠模式

时间:2017-05-16 18:30:11

标签: string python-2.7 replace substitution

给定字符串:s = "101010101",我想用模式010替换模式0X0的每一个匹配项,以便结果应为s = "10X0X0X01"

另一个类似的问题是用010替换相同的模式00,以便生成的字符串应为s = 100001

到目前为止,我试过:

import re
s = "101010101"
s = re.sub("010", "0X0", s)

但结果字符串为10X010X01,缺少替换中间的1

任何帮助?

2 个答案:

答案 0 :(得分:2)

您可以使用lookarounds查找值,而不在匹配中包含它们:

s = re.sub(r"(?<=0)1(?=0)", "X", s)

(?<=0)1(?=0)匹配前面的单个1字符 - (?<=…) -  并遵循 - (?=…) - 归零。

答案 1 :(得分:-1)

使用正则表达式几乎可以解决所有字符串操作问题。这并不意味着你应该使用它们。这似乎是使用正则表达式的一个自然问题,但你并不真的需要它。您可以剥离前导/尾随1,然后替换中间的1,然后将前导/尾随1重新打开:

s = "101010101"
s = "1" + s[1:-1].replace("1", "X") + "1"

print s

输出:10X0X0X01

s = "101010101"
s = "1" + s[1:-1].replace("1", "") + "1"

print s

输出:100001

我认为你发现的是正则表达式非常强大,但几乎不可读且难以推理。以你的问题为例。你做了什么看起来对那些没有使用正则表达式的人有用,但它没有。

这是一种权衡,但简单总是在我的书中获胜。