>백엔드 개발 >파이썬 튜토리얼 >Python의 `re.findall()`을 사용하여 겹치는 일치 항목을 어떻게 찾을 수 있나요?

Python의 `re.findall()`을 사용하여 겹치는 일치 항목을 어떻게 찾을 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-06 16:40:13644검색

How Can I Find Overlapping Matches Using Python's `re.findall()`?

Regex의 중복 일치 이해

기본적으로 Python re 모듈의 findall() 메서드는 문자열 내에서 중복 일치를 캡처하지 않습니다. . 특히 일치 항목이 연속 문자로 구성된 경우 이 동작은 혼란스러울 수 있습니다.

다음 코드를 고려하세요.

match = re.findall(r'\w\w', 'hello')
print(match)

출력:

['he', 'll']

이 패턴은 두 개의 연속 문자와 일치합니다. 단어 문자(w). 예상대로 그와 ll이 반환됩니다. 그러나 el과 lo는 문자열에 표시됨에도 불구하고 캡처되지 않습니다.

겹치는 일치 극복

겹치는 일치를 캡처하려면 예측 어설션(?= ...). 이 어설션은 특정 패턴과 일치하지만 문자열의 문자를 사용하지 않습니다. 대신 다음 문자가 어설션과 일치하는지 확인합니다.

예:

match1 = re.findall(r'(?=(\w\w))', 'hello')
print(match1)

출력:

['he', 'el', 'll', 'lo']

이 경우 (?=(ww ))은 두 개의 연속된 단어 문자가 실제로 소비되지 않고 존재하는 모든 위치와 일치합니다. 이를 통해 findall()은 겹치는 일치 항목과 겹치지 않는 일치 항목을 모두 반환할 수 있습니다.

설명

정규식 /(?=(ww))는 다음과 같이 나눌 수 있습니다. :

  • (?:...) 은 비캡처 그룹으로, 그룹의 내용을 의미합니다.
  • ww는 두 개의 연속된 단어 문자와 일치합니다.
  • (?=...)는 문자열이 현재 위치에 ww를 포함하지만 소비하지 않도록 보장하는 예측 어설션입니다.

이 접근 방식을 사용하면 연속된 문자로 구성된 경우에도 문자열 내에서 중복되는 모든 일치 항목을 효과적으로 검색할 수 있습니다.

위 내용은 Python의 `re.findall()`을 사용하여 겹치는 일치 항목을 어떻게 찾을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.