> 백엔드 개발 > 파이썬 튜토리얼 > `re.findall`이 중복되는 정규식 일치 항목을 반환하지 않는 이유는 무엇이며, Lookahead Assertions가 이 문제를 어떻게 해결할 수 있습니까?

`re.findall`이 중복되는 정규식 일치 항목을 반환하지 않는 이유는 무엇이며, Lookahead Assertions가 이 문제를 어떻게 해결할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-06 07:54:11
원래의
893명이 탐색했습니다.

Why Doesn't `re.findall` Return Overlapping Regex Matches, and How Can Lookahead Assertions Solve This?

겹치는 정규식 일치 발견: Lookahead Assertion 자세히 알아보기

문제:
re.findall을 사용하여 정규식 패턴과 일치시킬 때, 왜 겹치는 일치 항목을 모두 검색하지 않습니까? 예를 들어, 문자열 "hello"에서 정규식 r'ww'는 왜 "he" 및 "ll"에만 일치하고 "el" 및 "lo"에는 일치하지 않습니까?

답변:
기본적으로 re.findall은 중복되는 일치 항목을 생성하지 않습니다. 이를 달성하려면 강력한 정규식 기능인 예측 어설션을 사용하십시오.

해결책:

# Using a lookahead assertion
matches = re.findall(r'(?=(\w\w))', 'hello')

# Output: ['he', 'el', 'll', 'lo']
로그인 후 복사

정규식의 (?=...) 구문은 다음과 같습니다. 미리보기 주장. 지정된 패턴이 현재 위치 바로 뒤에 나타나는 경우 일치하지만 문자열의 문자를 사용하지 않습니다. 이 경우 문자를 사용하지 않고 "hello"에서 두 문자 시퀀스("ww")를 모두 식별합니다.

설명:

  • 괄호 표현식(ww)은 일치시킬 두 문자 패턴을 정의합니다.
  • (?=)가 패턴 앞에 옵니다. 예견 주장.
  • 정규식 引擎는 "hello"를 따라 커서를 이동하고 다음 두 문자가 "ww" 패턴과 일치하는지 지속적으로 확인합니다.
  • 그렇다면 현재 위치를 기록합니다.
  • 이 프로세스가 계속되어 "he", "el", "ll" 및 "he", "el" 및 "ll"과 같은 중복되는 모든 일치 항목이 검색됩니다. "안녕."

위 내용은 `re.findall`이 중복되는 정규식 일치 항목을 반환하지 않는 이유는 무엇이며, Lookahead Assertions가 이 문제를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿