"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 정규식을 사용하여 Python에서 여러 줄 블록을 일치시키는 방법은 무엇입니까?

정규식을 사용하여 Python에서 여러 줄 블록을 일치시키는 방법은 무엇입니까?

2024-11-04에 게시됨
검색:555

How to Match Multiline Blocks in Python Using Regular Expressions?

정규 표현식을 사용하여 여러 줄 블록 일치

Python의 정규 표현식을 사용하여 여러 줄에 걸쳐 있는 텍스트를 일치시킬 때 어려움을 겪을 수 있습니다. 다음 예제 텍스트를 고려하세요.

some Varying TEXT

DSJFKDAFJKDAFJDSAKFJADSFLKDLAFKDSAF
[more of the above, ending with a newline]
[yep, there is a variable number of lines here]

(repeat the above a few hundred times).

목표는 두 가지 구성 요소를 캡처하는 것입니다.

  • "some Varying TEXT"
  • 두 줄에 위치한 모든 대문자 줄 그 아래(개행 문자 제외)

여러 접근 방식이 시도되었지만 실패했습니다.

re.compile(r"^>(\w )$$(\n[.$] )^$", re.MULTILINE) # Capture both parts
re.compile(r"([^>][\w\s] )$", re.MULTILINE|re.DOTALL) # Just textlines

이 문제를 해결하려면 다음 정규 표현식을 활용하세요.

re.compile(r"^(. )\n((?:\n. ) )", re.MULTILINE)

"^" 및 "$"는 줄 바꿈과 일치하지 않습니다. 따라서 여러 줄 모드에서는 "^"가 줄 바꿈 뒤에오고 "$"가 줄 바꿈 앞에 옵니다.

또한 다양한 줄 바꿈 형식에 유의하세요. 줄 바꿈, 캐리지 리턴 또는 둘 다를 포함할 수 있는 텍스트의 경우 다음과 같은 보다 포괄적인 정규식을 사용하십시오.

re.compile(r"^(. )(?:\n|\r\n?)((?:(?:\n|\r\n?). ) )", re.MULTILINE)

점이 이미 줄 바꿈을 제외하기 때문에 DOTALL 수정자는 여기에서 필요하지 않습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3