>백엔드 개발 >파이썬 튜토리얼 >`re.findall`이 빈 목록을 반환하는 이유는 `re.search`가 Python 3.4.3에서 동일한 패턴 및 문자열로 올바르게 작동하는 이유는 무엇입니까?

`re.findall`이 빈 목록을 반환하는 이유는 `re.search`가 Python 3.4.3에서 동일한 패턴 및 문자열로 올바르게 작동하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-22 20:57:10220검색

Why Does `re.findall` Return an Empty List While `re.search` Works Correctly with the Same Pattern and String in Python 3.4.3?

re.findall이 비정상적으로 동작함

딜레마:

Python 3.4를 사용하는 Python 스크립트에서 .3, 재검색 메서드는 지정된 패턴을 사용하여 특정 소스 문자열에 적용될 때 예상되는 결과를 제공합니다. 그러나 re.findall은 같은 패턴과 소스 문자열에 대해 설명할 수 없을 정도로 빈 목록을 반환합니다.

탐색:

흥미롭게도 re.findall 메서드는 문자열을 기반으로 문자열에서 일치 항목을 추출하기 위한 요구 사항을 충족하는 것처럼 보임에도 불구하고 예기치 않게 동작합니다. 패턴.

해결 방법:

자세히 조사한 결과 두 가지 요소가 이 특이한 동작에 기여한다는 것이 분명해졌습니다.

  • 패턴 구성:
    제공된 패턴에는 논쟁적인 표현이 포함되어 있으며, r'.'은 이스케이프 문자() 뒤에 줄바꿈이 아닌 문자가 오는지 일치시키는 것을 목표로 합니다. 그러나 r'' 문자열 리터럴의 컨텍스트 내에서 이 표현식은 리터럴 일치를 시도하므로 잘못된 동작이 발생합니다.
  • findall 동작:
    re. findall 메서드는 패턴에 캡처 그룹이 포함될 것으로 예상합니다. 캡처링 그룹이 없으면 빈 문자열을 반환합니다. 원래 패턴에는 캡처 그룹이 부족하여 원하는 일치 항목을 캡처할 수 없습니다.

수정된 패턴:

이 문제를 완화하고 일치 항목을 성공적으로 추출하려면 다음 수정된 패턴은 고용:

-?\d*\.?\d+

설명:

  • -?: 선택적 빼기 기호
  • d *: 선택 사항 숫자
  • .?: 선택적 소수 구분 기호
  • d : 하나 이상의 숫자

데모 :

수정된 내용 활용 패턴을 사용하면 이제 re.findall 메소드가 예상 일치 항목 목록을 정확하게 검색합니다.

['123', '3.1415926']

위 내용은 `re.findall`이 빈 목록을 반환하는 이유는 `re.search`가 Python 3.4.3에서 동일한 패턴 및 문자열로 올바르게 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.