我正在尝试使用正则表达式从文本块中删除一些内容。我已经准备好所有模式,但我似乎无法删除两个(或更多)重叠的部分。
例如:
import re
r1 = r'I am'
r2 = r'am foo'
text = 'I am foo'
re.sub(r1, '', text) # Returns ' foo'
re.sub(r2, '', text) # Returns 'I '
如何同时替换这两个事件并以空字符串结尾?
我最终使用了Ned Batchelder 答案的略微修改版本:
def clean(self, text):
mask = bytearray(len(text))
for pattern in patterns:
for match in re.finditer(pattern, text):
r = range(match.start(), match.end())
mask[r] = 'x' * len(r)
return ''.join(character for character, bit in zip(text, mask) if not bit)