특정 텍스트가 포함된 텍스트 블록을 검색하는 메모장++ 정규식

특정 텍스트가 포함된 텍스트 블록을 검색하는 메모장++ 정규식

나는 이와 같은 텍스트 블록을 3개나 갖고 있다고 말합니다.

[Event "Chess"]
[Date "1994"]
[White "Viktor Bologan"]
[Black "Michael Adams"]
[Result "0-1"]

1.e4 e5 2.Nf3 Nc6 3.Bc4 Bc5 4.c3 Nf6 5.d3 d6 6.Nbd2 a6 7.Bb3 Ba7 8.h3 O-O
9.Nf1 h6 10.g4 d5 11.Qe2 dxe4 12.dxe4 Nd7 13.g5 Nc5 14.gxh6 Nd3+ 15.Kd1 Nf4+
16.Qd2 Qf6 17.Rg1 g6 18.Kc2 Nxh3 19.Rg3 Nxf2 20.Ng5 Nxe4 21.Nxe4 Qxf1 22.Qg5 Qe2+
23.Kb1 Qxe4+  0-1


[Event "Chess"]
[Date "1995"]
[White "Michael Adams"]
[Black "Fernando Silva"]
[Result "0-1"]

1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 Nc6 6.Bg5 Bd7 7.Qd2 Nxd4 8.Qxd4 Qa5
9.Bd2 e5 10.Nd5 Qxd5 11.Qxd5 Nxd5 12.exd5 Be7 13.Be2 O-O 14.c4 Rfc8 15.O-O b5
16.Rfc1 bxc4 17.Bxc4 a5 18.Bd3 Bd8 19.Rxc8 Rxc8 20.Rc1 Rb8 21.b3 f5 22.Bc4 Kf8
23.h3 Ke8 24.Rc2 Bb5 25.Kf1 Bxc4+ 26.bxc4 Rb1+ 27.Ke2 Kd7 28.Bc3 Rg1 29.g3 Bb6
30.Be1 f4 31.gxf4 exf4 32.Bc3 g5 33.Kf3  0-1


[Event "Chess"]
[Date "1995"]
[White "Michael Adams"]
[Black "Jeroen Piket"]
[Result "1-0"]

1.e4 e5 2.Nf3 Nc6 3.Bc4 Bc5 4.c3 Nf6 5.d3 a6 6.Nbd2 O-O 7.Bb3 d6 8.h3 Be6
9.Bc2 h6 10.O-O Re8 11.Qe2 Nh5 12.Kh2 Nf4 13.Qd1 Qf6 14.Ng1 Rad8 15.Qf3 Qg6
16.Nb3 Nh5 17.Nxc5 dxc5 18.Be3 b6 19.Ne2 Nf6 20.Qg3 Qxg3+ 21.Nxg3 c4 22.Rfd1 cxd3
23.Bxd3 a5 24.Bc2 Rxd1 25.Bxd1 Rd8 26.Be2 Ne8 27.Nf1 Nd6 28.Nd2 f6 29.Kg1 Kf7
30.Kf1 Ke7 31.Ke1 Bf7 32.f3 Be6 33.Bf2 g6 34.b3 Kf7 35.Bd3 Nc8 36.Ke2 N8e7
37.h4 h5 38.Be3 Rd7 39.a3 Rd8 40.a4 Ra8 41.Nc4 Rd8 42.Rg1 Nc8 43.Rb1 Nd6
44.Nxd6+ Rxd6 45.Kd2 Ne7 46.Kc2 Bd7 47.Rg1 Be6 48.Be2 Rd8 49.Rf1 Nc8 50.f4 Nd6
51.Bd3 exf4 52.Bxf4 Ne8 53.Bb5 Nd6 54.Bc6 Kg7 55.e5 Bf5+ 56.Kb2 Nf7 57.exf6+ Kxf6
58.g3 Rc8 59.Re1 Rd8 60.Bxc7 Rc8 61.Bxb6  1-0

그래서 저는 다음을 포함하는 텍스트의 전체 블록을 찾아 선택하려고 합니다.

1.e4 e5 2.Nf3 Nc6 3.Bc4 Bc5 

그래서 검색하면 block1과 block3을 모두 선택해야 합니다. 도움이 될 수는 있지만 완전히 구성할 수는 없는 패턴을 시도하고 있습니다.

패턴은 다음과 같습니다\R\[Event (?:(?!\[Event)[\s\S])+1.e4 e5 2.Nf3 Nc6 3.Bc4 Bc5 \s\S\R(?!"\])

답변1

매우 가깝습니다. 첫 번째 부분을 (줄의 시작) \R으로 변경하고 ^점을 피한 다음 마지막 부분을 \s\S\R(?!"\])로 변경하세요 [\s\S]+?(?:\R\R|\z). 아래 설명을 참조하세요.

이는 귀하의 예에서 2번 발생하는 것과 일치합니다.

  • Ctrl+F
  • 무엇을 찾다:^\[Event (?:(?!\[Event)[\s\S])+1\.e4 e5 2\.Nf3 Nc6 3\.Bc4 Bc5 [\s\S]+?(?:\R\R|\z)
  • 둘러보기 확인
  • 정규식 확인
  • Find All in Current Document

설명:

^                                   # beginning of line
  \[Event                           # literally
  (?:                               # starqt tempered greedy token
    (?!\[Event)                     # negative lookahead, make sure we haven't [Event
    [\s\S]                          # any character included linebreak
  )+                                # 1 or more times
  1\.e4 e5 2\.Nf3 Nc6 3\.Bc4 Bc5    # literally
  [\s\S]+?                          # 1 or more any character included linebreak, not greedy
  (?:\R\R|\z)                       # non capture group, double linebreak or end of file

화면 캡처:

여기에 이미지 설명을 입력하세요

답변2

다음 검색 문자열을 사용하세요.

^\[Event.*?\R.*?\R.*?\R.*?\R.*?\R.*?\R1\.e4 e5 2\.f4 exf4 3\.Nf3 g5 4\.h4 g4(?sm).*?(?=\R\R)

어디:

  • ^\[Event: [Event줄 시작 부분 과 일치
  • .*?\R: 개행 문자까지 포함하여 탐욕스럽지 않은 일치, 6회
  • 1\.e4 e5 2\.f4 exf4 3\.Nf3 g5 4\.h4 g4: 검색할 문자열
  • (?sm): 여러 줄 일치를 켭니다.
  • .*?: 어떤 캐릭터와도 탐욕스럽지 않은 일치
  • (?=\R\R): 빈줄을 포함하지 않고 까지

".matches newline" 옵션을 선택하지 마십시오.

여기에 이미지 설명을 입력하세요

관련 정보