我想用正則表達式從文本塊中刪除一些東西。我準備好了所有的圖案,但我似乎無法移除重疊的兩個(或更多)圖案。結合多個正則表達式替換
例如:
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's answer略加修改:
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)
我從來沒有想過匹配對象的'start'和'end'屬性。我非常確定這會起作用,所以謝謝! – Blender 2012-07-11 22:42:52
很好的答案!我將'()'添加到'start'和'end',因爲這些是方法,而不是屬性。 – georg 2012-07-11 23:00:00
@ thg435:謝謝,我應該測試它! :) – 2012-07-11 23:18:59