re.findall이 예측할 수 없게 동작합니다
아래에 정의된 원래 문자열과 패턴을 사용합니다.
s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
re. search는 일치하는 항목을 정확하게 찾는 반면 re.findall은 빈 목록을 생성합니다. ['123', '3.1415926']의 예상 출력과 모순되는 이 동작은 re.findall이 왜 이 결과를 생성하지 않는지에 대한 의문을 제기합니다.
문제 이해
두 가지 주요 고려 사항이 있습니다. 여기:
정규식 수정
이 문제를 해결하려면 패턴을 수정하여 중복 캡처 그룹을 제거하고 숫자를 올바르게 일치시킬 수 있습니다.
pattern = r'-?\d*\.?\d+'
이 패턴은 다음과 일치합니다:
결과
이 수정된 패턴을 사용하여 re.findall은 예상한 결과를 생성합니다. 출력:
import re L = re.findall(pattern, s) print(L) # Output: ['123', '3.1415926']
위 내용은 `re.search`가 성공했는데 `re.findall`이 문자열에서 숫자를 찾지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!