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

정규식을 사용하여 여러 줄의 텍스트 블록을 캡처하는 방법은 무엇입니까?

2024-11-03에 게시됨
검색:753

How to Capture Multiline Text Blocks with Regular Expressions?

여러 줄 텍스트 블록 일치를 위한 정규식

여러 줄에 걸쳐 있는 텍스트를 일치시키면 정규식 구성이 어려울 수 있습니다. 다음 예제 텍스트를 고려하세요.

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" 부분과 빈 줄을 제외한 모든 후속 대문자 텍스트 줄을 캡처하는 것입니다.

잘못된 접근 방식:

이 문제를 해결하기 위한 몇 가지 잘못된 접근 방식 include:

  • ^ 및 $ 앵커를 사용하여 줄 바꿈을 일치시킵니다. 여러 줄 모드에서 ^는 줄 바꿈 뒤의 위치와 일치하고 $는 줄 바꿈 앞의 위치와 일치합니다.
  • DOTALL 수정자를 사용하여 모든 것을 일치시킵니다. 점(.)은 줄 바꿈을 제외한 모든 것과 일치하므로 이는 필요하지 않습니다.

해결책:

다음 정규식은 원하는 것을 올바르게 캡처합니다. 구성요소:

^(. )\n((?:\n. ) )

구성요소에 대한 분석은 다음과 같습니다.

  • ^는 다음의 시작과 일치합니다. 라인.
  • (. )는 "some Varying TEXT" 부분을 그룹 1로 캡처합니다.
  • \n은 개행 문자.
  • ((?:\n. ) ) 는 대문자 텍스트의 모든 후속 행을 그룹 2로 캡처합니다. ?: 비캡처 그룹 구성은 이러한 행이 개별 그룹으로 캡처되는 것을 방지합니다.
  • 반복 연산자는 대문자 텍스트가 한 줄 이상 들어가도록 보장합니다. 현재.

사용법:

파이썬에서 이 정규 표현식을 사용하려면 다음 코드를 사용할 수 있습니다:

import re

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

그런 다음 match() 메서드를 사용하여 문자열에서 일치하는 항목을 찾을 수 있습니다. :

match = pattern.match(text)
if match:
    text1 = match.group(1)
    text2 = match.group(2)
최신 튜토리얼 더>

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

Copyright© 2022 湘ICP备2022001581号-3