복붙노트

[PYTHON] Python 정규식, 여러 줄에 걸쳐 패턴 일치. 왜이 코드가 작동하지 않습니까?

PYTHON

Python 정규식, 여러 줄에 걸쳐 패턴 일치. 왜이 코드가 작동하지 않습니까?

나는 구문 분석을 위해 모든 공간과 줄 바꿈을 이상적으로 제거해야한다는 것을 알고 있지만, 필자가 시도한 것에 대한 빠른 수정으로이 작업을 수행하고 있었고 작동하지 않는 이유를 알아 내지 못했습니다. 텍스트의 여러 영역을 "#### 1"과 같은 래퍼가있는 문서와이 구문을 기반으로 구문을 분석하려고합니다. 그러나 아무리 노력해도 작동하지 않습니다. 여러 줄을 올바르게 사용하고 있다고 생각합니다. 조언을 보내 주시면 감사하겠습니다.

결과가 전혀 반환되지 않습니다.

string='
####1
ttteest
####1
ttttteeeestt

####2   

ttest
####2'

import re
pattern = '.*?####(.*?)####'
returnmatch = re.compile(pattern, re.MULTILINE).findall(string)
return returnmatch

해결법

  1. ==============================

    1.re.findall (r "#### (. *?) \ s (. *?) \ s ####", string, re.DOTALL)을 사용해보십시오. 물론 re.compile에서도 작동합니다.

    re.findall (r "#### (. *?) \ s (. *?) \ s ####", string, re.DOTALL)을 사용해보십시오. 물론 re.compile에서도 작동합니다.

    이 정규 표현식은 섹션 번호와 섹션 내용이 포함 된 튜플을 반환합니다.

    예를 들어, [( '1', 'ttteest'), ( '2', '\ n \ nttest')]를 반환합니다.

    (예 : 귀하의 예제가 실행되지 않습니다, 여러 줄 문자열에 대해 '' '또는 ""사용)

  2. ==============================

    2.다중 행은 ​​의미하지 않습니다. 줄 반환과 일치합니다, 그것은 ^와 $가 줄에만 제한된다는 것을 의미합니다

    다중 행은 ​​의미하지 않습니다. 줄 반환과 일치합니다, 그것은 ^와 $가 줄에만 제한된다는 것을 의미합니다

    re.SOT 또는 re.DOTALL이됩니다. 새로운 라인까지 일치시킵니다.

    출처

    http://docs.python.org/

  3. from https://stackoverflow.com/questions/3534507/python-regex-matching-pattern-over-multiple-lines-why-isnt-this-working by cc-by-sa and MIT license