파 이 썬 의 최 단 일치 모드 를 자세히 설명 합 니 다.

문제.
정규 표현 식 으로 텍스트 모드 를 일치 시 키 려 고 시도 하고 있 지만,패턴 의 최 장 일치 가능성 을 찾 았 습 니 다.가장 짧 은 검색 이 일치 할 수 있 도록 수정 하고 싶 습 니 다.
해결 방안
이 문 제 는 일반적으로 구분자 사이 의 텍스트 와 일치 해 야 할 때(예 를 들 어 따옴표 에 포 함 된 문자열)에 나타난다.명확 하 게 설명 하기 위해 다음 과 같은 예 를 고려 합 니 다.

>>> str_pat = re.compile(r'"(.*)"')
>>> text1 = 'Computer says "no."'
>>> str_pat.findall(text1)
['no.']
>>> text2 = 'Computer says "no." Phone says "yes."'
>>> str_pat.findall(text2)
['no." Phone says "yes.']
>>>
이 예 에서 모드 r'\'(.*)\'의 의 도 는 작은 따옴표 에 포 함 된 텍스트 와 일치 하 는 것 입 니 다.그러나 정규 표현 식 에서*조작 자 는 욕심 이 많 기 때문에 일치 하 는 동작 은 가장 긴 일치 할 수 있 는 것 을 찾 습 니 다.그래서 두 번 째 예 에서 text 2 를 검색 할 때 결 과 를 되 돌려 주 는 것 은 우리 가 원 하 는 것 이 아니다.
이 문 제 를 수정 하기 위해 서 모드 의*연산 자 뒤에 추가 할 수 있 습 니까?장식 부적,이렇게:

>>> str_pat = re.compile(r'"(.*?)"')
>>> str_pat.findall(text2)
['no.', 'yes.']
>>>
이렇게 하면 매 칭 을 비 탐욕 모델 로 만 들 고 가장 짧 은 매 칭,즉 우리 가 원 하 는 결 과 를 얻 을 수 있다.
토론 하 다.
이 절 은 점(.)문 자 를 포함 하 는 정규 표현 식 을 쓸 때 흔히 볼 수 있 는 문 제 를 보 여 줍 니 다.패턴 문자열 에서 점(.)은 줄 을 바 꾸 는 것 을 제외 한 모든 문자 와 일치 합 니 다.그러나 점(.)번 호 를 시작 과 끝 문자(예 를 들 어 따옴표)사이 에 두 면 일치 하 는 동작 은 패턴 에 맞 는 최 장 일치 할 수 있 습 니 다.이 로 인해 끝 문자 에 포 함 된 텍스트 를 무시 하고 일치 하 는 결과 문자열 에 포함 되 어 되 돌아 오 는 경우 가 많 습 니 다.*또는+와 같은 연산 자 뒤에 하 나 를 추가 하 시 겠 습 니까?일치 알고리즘 을 가장 짧 은 일치 가능성 을 찾 는 것 으로 강제 할 수 있 습 니 다.
이상 은 Python 의 최 단 일치 모델 에 대한 상세 한 내용 입 니 다.Python 의 최 단 일치 모델 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기