给定字符串:s = "101010101"
,我想用模式010
替换模式0X0
的每一个匹配项,以便结果应为s = "10X0X0X01"
。
另一个类似的问题是用010
替换相同的模式00
,以便生成的字符串应为s = 100001
。
到目前为止,我试过:
import re
s = "101010101"
s = re.sub("010", "0X0", s)
但结果字符串为10X010X01
,缺少替换中间的1
。
任何帮助?
答案 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
我认为你发现的是正则表达式非常强大,但几乎不可读且难以推理。以你的问题为例。你做了什么看起来对那些没有使用正则表达式的人有用,但它没有。
这是一种权衡,但简单总是在我的书中获胜。