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

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

Patricia Arquette
Patricia Arquette원래의
2024-10-25 06:05:02777검색

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

잘못된 접근 방식:

이 문제를 해결하기 위한 몇 가지 잘못된 접근 방식은 다음과 같습니다.

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

해결책:

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

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

다음은 해당 구성 요소에 대한 분석입니다.

  • ^은 줄의 시작과 일치합니다.
  • (. )는 "some Varying TEXT" 부분을 그룹 1로 캡처합니다.
  • n은 개행 문자와 일치합니다.
  • ( (?:n. ) )는 이후의 모든 대문자 텍스트 줄을 그룹 2로 캡처합니다. ?: 비캡처 그룹 구조는 이러한 줄이 개별 그룹으로 캡처되는 것을 방지합니다.
  • 반복 연산자는 최소한 대문자 텍스트 줄이 있습니다.

사용법:

Python에서 이 정규식을 사용하려면 다음 코드를 사용할 수 있습니다.

<code class="python">import re

pattern = re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)</code>

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

<code class="python">match = pattern.match(text)
if match:
    text1 = match.group(1)
    text2 = match.group(2)</code>

위 내용은 정규식을 사용하여 여러 줄의 텍스트 블록을 캡처하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.