정규식 일치 주위에 몇 줄을 캡처하는 방법은 무엇입니까?


8

일치하는 줄을 통해 두 줄을 일치시키는 정규식을 찾고 있습니다. 예를 들면 다음과 같습니다.

ABCDEFGHADEFGH
ABCDEFGHADEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
XXXXXXXX

XXXXXXXX 위의 2 줄을 캡처하고 싶습니다.

도움을 주시면 감사하겠습니다. 참고 : 라이브러리 re를 사용하는 Python의 경우


1
어떤 소프트웨어를 사용합니까? 다른 프로그램은 정규 표현식에 대해 다른 아이디어를 가지고 있습니다.
David Richerby

구체적으로 또는 도구 / 언어에서 파이썬을 사용하십니까?
kenorb

파이썬을 사용하는 경우 전체를 배열에 덤프하는 것이 좋습니다. 여기서 각 행은 자체 요소입니다. 그런 다음 배열을 반복하여 XXXXXXXX를 찾으면 해당 항목 -1 및 -2의 색인을 사용하여 행을 가져옵니다.
LPChip

안녕 남자는 조언 주셔서 감사합니다, 나는 이미 for 루프와 함께했지만 정규식과 관련된 방법을 궁금해
takobaba

답변:


15

다음 RegEx는 라인 앞에 가변적 인 양의 라인을 테스트 XXXXXXXX하여 첫 번째 캡처 그룹으로 반환합니다.

((.*\n){2})XXXXXXXX

  1. (.*\n)\n개행으로 끝나는 문자열을 테스트합니다 .
  2. {2} 이것을 2 번 정량합니다.
  3. () 그 주위에 모든 라인이 하나의 캡처 그룹으로 들어갑니다.
  4. XXXXXXXX 텍스트로 끝나는 문자열입니다.

이제 파이썬에서는 p.match(regex)[0]첫 번째 캡처 그룹을 반환하는 데 사용할 수 있습니다 .


4
이로 인해 Windows에서 문제가 발생할 수 있습니다. 그렇다면 \r\n그냥 대신 사용해보십시오 \n.
Qix-MONICA가 MISTREATED

1
물론, 이것은 단지 라인 일치 시작 으로을 XXXXXXXX(하지만 반드시 끝나지 않습니다 XXXXXXXX).
G-Man은

0

erikgaal의 답변에 추가하기 위해 xxxxxx 앞에 여분의. *를 사용하여 탭 / 공백을 일치시킵니다.

((. * \ n) {2}). * xxxxxxx


1
음, .*일치하지 않습니다 단지 탭 / 공간; 어떤 것이 든 일치 합니다 (예 : "The quick brown XXXXXXX").
G-Man은
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.