re.findall 잘못된 동작: 원하지 않는 빈 결과
주어진 시나리오에서 re.search()는 의도한 숫자 값을 성공적으로 추출했습니다. 123" 소스 문자열에서 re.findall()이 예기치 않게 빈 문자열을 생성했습니다.
조사 결과 범인은 r'\.'로 확인됐다. 정규식 패턴의 일부입니다. 원시 문자열(접두사 r이 붙음) 내에서 \는 문자 그대로 처리되어 백슬래시 문자 뒤에 개행 문자를 제외한 모든 문자가 오는 것과 일치합니다. 그러나 이는 부동 소수점 숫자를 캡처하기 위한 의도된 동작이 아닙니다.
문제를 해결하기 위해 수정된 패턴 -?d*.?d는 다음 원칙을 따릅니다.
이 수정된 패턴을 사용하여 re.findall()은 이제 소스 문자열의 숫자 값을 올바르게 식별합니다.
import re s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?\d*\.?\d+' L = re.findall(pattern, s) print(L) # Output: ['123', '3.1415926']
re.findall()이 캡처 그룹 없이 일치 값을 반환하려면 패턴에 캡처 그룹이 없어야 한다는 점을 기억하세요. 패턴 내에 역참조가 없는 한 비캡처 그룹(예: (?:)).
위 내용은 Python에서 부동 소수점 숫자를 일치시킬 때 `re.findall()`이 빈 결과를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!