정규식을 사용하여 텍스트 블록에서 일부 내용을 삭제하려고합니다. 나는 모든 패턴을 준비했지만, 중복되는 두 개 (또는 그 이상)를 제거 할 수없는 것처럼 보입니다. 예를 들어여러 정규 표현식 대체하기
:
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)
나는 match 객체의'start'와'end' 속성에 대해서는 생각해 본 적이 없습니다. 이게 효과가 있다는 것을 확신합니다. 감사합니다! – Blender
좋은 답변입니다! 이 메서드는 속성이 아니기 때문에'()'을'start'와'end'에 추가했습니다. – georg
@ thg435 : 감사합니다. 테스트 해 보았습니다! :) –