>  기사  >  백엔드 개발  >  Python 여러 줄 일치 패턴 이해

Python 여러 줄 일치 패턴 이해

Guanhui
Guanhui앞으로
2020-07-24 17:22:333006검색

Python 여러 줄 일치 패턴 이해

문제

정규식을 사용하여 큰 텍스트 블록을 일치시키려고 하는데 여러 줄에 걸쳐 일치해야 합니다.

해결 방법

이 문제는 일반적으로 점(.)을 사용하여 문자와 일치하지만 점(.)이 개행 문자와 일치할 수 없다는 점을 잊어버릴 때 발생합니다. 예를 들어 C에서 분할된 주석을 일치시키려고 한다고 가정해 보겠습니다.

>>> comment = re.compile(r&#39;/\*(.*?)\*/&#39;)<br/>>>> text1 = &#39;/* this is a comment */&#39;<br/>>>> text2 = &#39;&#39;&#39;/* this is a<br/>... multiline comment */<br/>... &#39;&#39;&#39;<br/>>>><br/>>>> comment.findall(text1)<br/>[&#39; this is a comment &#39;]<br/>>>> comment.findall(text2)<br/>[]<br/>>>><br/>

이 문제를 해결하려면 패턴 문자열을 수정하여 개행 지원을 추가할 수 있습니다. 예:

>>> comment = re.compile(r&#39;/\*((?:.|\n)*?)\*/&#39;)<br/>>>> comment.findall(text2)<br/>[&#39; this is a\n multiline comment &#39;]<br/>>>><br/>

이 패턴에서 (?:.|n)은 비캡처 그룹을 지정합니다(즉, 일치에만 사용되며 개별적으로 캡처하거나 번호를 매길 수 없는 그룹을 정의합니다).

Discussion

re.compile() 이 함수는 여기서 매우 유용한 re.DOTALL 라는 플래그 매개변수를 허용합니다. 정규식에서 개행 문자를 포함한 모든 문자와 일치하는 것을 허용합니다. 예: re.compile() 函数接受一个标志参数叫 re.DOTALL ,在这里非常有用。它可以让正则表达式中的.匹配包括换行符在内的任意字符。比如:

>>> comment = re.compile(r&#39;/\*(.*?)\*/&#39;, re.DOTALL)<br/>>>> comment.findall(text2)<br/>[&#39; this is a\n multiline comment &#39;]<br/>

对于简单的情况使用 re.DOTALL rrreee

re.DOTALL 태그 매개변수를 사용하면 간단한 경우에는 잘 작동하지만, 패턴이 매우 복잡하거나 여러 패턴이 결합되어 문자열 토큰을 구성하는 경우(섹션 2.18 자세한 설명) 일부 이 표시 매개변수를 사용할 때 문제가 발생할 수 있습니다. 선택할 수 있는 경우 추가 마커 매개변수 없이도 잘 작동하도록 고유한 정규식 패턴을 정의하는 것이 좋습니다.

추천 튜토리얼: "Python Tutorial

"🎜

위 내용은 Python 여러 줄 일치 패턴 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제