Tôi đang cố xóa một số nội dung khỏi khối văn bản bằng regex. Tôi có tất cả các mẫu của tôi đã sẵn sàng, nhưng tôi dường như không thể loại bỏ hai (hoặc nhiều hơn) chồng lên nhau.Kết hợp nhiều thay thế regex
Ví dụ:
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 '
Làm thế nào để thay thế cả hai lần xuất hiện đồng thời và kết thúc với một chuỗi rỗng?
tôi đã kết thúc bằng một phiên bản sửa đổi nhẹ của 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)
Tôi chưa bao giờ nghĩ đến thuộc tính 'bắt đầu' và' cuối' cho đối tượng khớp. Tôi chắc chắn rằng điều này sẽ làm việc, vì vậy cảm ơn! – Blender
Câu trả lời hay! Tôi đã thêm '()' vào 'bắt đầu' và' kết thúc', vì đây là các phương thức chứ không phải thuộc tính. – georg
@ thg435: cảm ơn, tôi nên thử nghiệm nó! :) –