정규 표현식의 세계에서 특정 일치 항목을 찾을 수 없는 이유를 이해하는 것은 어리둥절할 수 있습니다. 다음 예를 살펴보세요.
match = re.findall(r'\w\w', 'hello') print(match)
예상대로 이 코드 조각은 두 글자 시퀀스 패턴과 일치하는 'he'와 'll'이 포함된 목록을 반환합니다. 그런데 왜 패턴에 맞는 것처럼 보이는 'el'과 'lo'가 결과에 포함되지 않는지 궁금할 수도 있습니다.
이러한 동작은 re.findall 함수의 기본 동작에서 비롯됩니다. 중복되는 일치 항목을 생성하지 않습니다. 즉, 문자열을 따라 이동하여 주어진 패턴에 대해 첫 번째 일치만 찾고 잠재적인 중복은 고려하지 않습니다.
이 문제를 해결하기 위해 예측 어설션과 관련된 영리한 해결 방법이 있습니다. 예측 어설션(?=...)은 실제로 문자열을 사용하지 않고 패턴과 일치합니다. 이를 통해 주어진 패턴을 만족하는 중복되는 모든 일치 항목을 찾을 수 있습니다.
예를 들어, 예측 어설션을 사용하여 문자열 'hello'에서 두 문자 시퀀스를 모두 찾으려면 다음 표현식을 사용할 수 있습니다.
re.findall(r'(?=(\w\w))', 'hello')
이 표현식은 ['he', 'el', 'll', 'lo']를 포함하는 목록을 반환합니다. 각 두 글자 시퀀스는 없이 성공적으로 일치됩니다.
예측 어설션과 실제 적용을 이해하면 복잡한 일치 시나리오에 대한 정규식의 효율성을 크게 향상시킬 수 있습니다.
위 내용은 `re.findall()`이 중복되는 정규식 일치를 반환하지 않는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!