re.findall이 일관되지 않게 동작합니다
re.findall을 사용하여 문자열의 숫자 값을 일치시키려고 할 때 일부 사용자가 예상치 못한 동작을 발견했습니다. . re.search는 일치 항목을 정확하게 검색하지만 re.findall은 빈 목록을 반환합니다. 이러한 명백한 차이는 다음 요인에 기인할 수 있습니다.
그룹 캡처 및 re.findall
기억해야 할 한 가지 핵심 사항은 re.findall이 다음과 같은 경우 캡처된 텍스트를 획득한다는 것입니다. 정규식 패턴에는 캡처 그룹이 포함되어 있습니다. 참조에 정의된 대로 패턴에 캡처 그룹이 포함된 경우 re.findall은 잠재적으로 여러 그룹이 있는 패턴에 대해 튜플 형식으로 그룹 목록을 반환합니다. 특히, 다른 일치 항목 바로 앞에 있지 않는 한 빈 일치 항목도 출력에 포함됩니다.
비캡처 그룹 및 리터럴 이스케이프
제공된 예에서 특정 문제는 r'' 문자열 리터럴 내에서 \를 사용하는 데서 발생합니다. 이 구성은 단일 문자(개행 문자 제외)와 일치시키려는 의도된 의미가 아니라 리터럴 일치를 시도합니다. 숫자 값을 올바르게 일치시키려면 패턴을 다음과 같이 수정해야 합니다.
-?\d*\.?\d+
이 패턴에는 다음 캡처 그룹이 포함됩니다.
데모
다음은 수정된 패턴의 IDEONE 데모입니다.
import re s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?\d*\.?\d+' L = re.findall(pattern, s) print(L)
이 패턴은 예상되는 숫자 일치 목록을 올바르게 검색합니다. ['123', '3.1415926'].
캡처 그룹의 특성과 리터럴 이스케이프의 적절한 사용법을 고려하여 개발자는 re.findall이 스크립트에서 의도한 대로 작동하는지 확인할 수 있습니다.
위 내용은 Python에서 숫자를 일치시킬 때 `re.findall`이 빈 목록을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!