场景:我试图在包含类似块的文件中提出一个正则表达式,它基本上是 PGN 文件。
每个区块都以 [事件 ” 开始
..和 ents 在
(1/2-1/2|1-0|0-1)
管道符号 | 表示括号之间只有一个值,即 1/2-1/2、1-0 或 0-1
问题:我想提出一个正则表达式,该正则表达式将搜索 1/2-1/2,然后向上查找“[Event ”并选择所有块。
因此,考虑以下三个部分
[Event "Chess"]
[Date "2016"]
[White "Caruana,F"]
[Black "Onischuk,Al"]
[Result "1-0"]
1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 4.Ba4 Nf6 5.O-O Bc5 6.c3 b5 7.Bc2 d5 8.a4 dxe4
9.axb5 Bg4 10.bxc6 exf3 11.gxf3 Be6 12.Ra5 Qd6 13.f4 e4 14.d4 exd3 15.Qxd3 O-O
16.Qxd6 Bxd6 17.Rd1 Bg4 18.Rd4 Bf3 19.Ba4 Rfe8 20.Be3 Ne4 21.Bd1 Bxd1 22.Rxd1 Rab8
23.Nd2 Rxb2 24.Nxe4 Rxe4 25.Re5 Rxe3 26.fxe3 Rb8 27.Ra5 Kf8 28.c4 1-0
[Event "Chess"]
[Date "2016"]
[White "Shabalov,A"]
[Black "Onischuk,Al"]
[Result "1/2-1/2"]
1.d4 Nf6 2.c4 e6 3.Nc3 d5 4.Nf3 Be7 5.e3 O-O 6.Bd3 dxc4 7.Bxc4 c5 8.O-O b6
9.Qe2 Bb7 10.dxc5 Bxc5 11.e4 Nbd7 12.Bf4 Nh5 13.Bg5 Be7 14.Be3 Nhf6 15.Rfd1 Qb8
16.Nd4 Rd8 17.f3 Ne5 18.Bb3 Nc6 19.Nxc6 Rxd1+ 20.Rxd1 Bxc6 21.Nb5 Qe5 22.Na3 Qc7
23.Rc1 Rc8 24.Qa6 Qd7 25.Rd1 Qc7 26.Rc1 Qd7 27.Rd1 Qc7 28.Rc1 Qd7 29.Rd1 Qc7
30.Rc1 1/2-1/2
[Event "Chess"]
[Date "2016"]
[White "Onischuk,Al"]
[Black "Akobian,V"]
[Result "1/2-1/2"]
1.d4 d5 2.c4 e6 3.Nc3 Nf6 4.Bg5 Be7 5.Nf3 O-O 6.Qc2 h6 7.Bh4 b6 8.cxd5 Nxd5
9.Nxd5 exd5 10.Bxe7 Qxe7 11.Rc1 c5 12.dxc5 Bg4 13.e3 Bxf3 14.gxf3 Rc8 15.Qd2 Rxc5
16.Rxc5 Qxc5 17.Bg2 Nd7 18.O-O Rc8 19.Rd1 Nf6 20.f4 Qc2 21.Bxd5 Nxd5 22.Qxd5 Qxb2
23.Qd7 Rc1 24.Rxc1 Qxc1+ 25.Kg2 Qc4 26.Qxa7 Qe4+ 27.Kg3 Qg6+ 28.Kf3 Qh5+
29.Kg2 Qg4+ 30.Kf1 Qd1+ 31.Kg2 1/2-1/2
因此,如果我输入该表达式,(虽然搜索从底部开始,但它应该只找到并选择第三个块,如下所示
[Event "Chess"]
[Date "2016"]
[White "Onischuk,Al"]
[Black "Akobian,V"]
[Result "1/2-1/2"]
1.d4 d5 2.c4 e6 3.Nc3 Nf6 4.Bg5 Be7 5.Nf3 O-O 6.Qc2 h6 7.Bh4 b6 8.cxd5 Nxd5
9.Nxd5 exd5 10.Bxe7 Qxe7 11.Rc1 c5 12.dxc5 Bg4 13.e3 Bxf3 14.gxf3 Rc8 15.Qd2 Rxc5
16.Rxc5 Qxc5 17.Bg2 Nd7 18.O-O Rc8 19.Rd1 Nf6 20.f4 Qc2 21.Bxd5 Nxd5 22.Qxd5 Qxb2
23.Qd7 Rc1 24.Rxc1 Qxc1+ 25.Kg2 Qc4 26.Qxa7 Qe4+ 27.Kg3 Qg6+ 28.Kf3 Qh5+
29.Kg2 Qg4+ 30.Kf1 Qd1+ 31.Kg2 1/2-1/2
...然后当我单击“查找下一个”时,它应该找到 7 选择第二个块。
因此,要搜索的两个词是 1. [事件 " 2. 1/2-1/2
请问有人可以帮忙吗?
答案1
根据重新制定进行编辑
- Ctrl+F
- 找什么:
\[Event (?:(?!\[Event)[\s\S])+1/2-1/2(?!"\])
- 检查环绕
- 检查正则表达式
- 请勿检查
. matches newline
- Search in document
解释:
\[Event : literally [Event
(?: : start non capture group
(?! : start negative look ahead, zero-length assertion that make sure we don't have [Event after
\[Event : literally [Event
) : end look ahead
[\s\S] : any character, space or not space
)+ : group appears 1 or more times
1/2-1/2 : literally 1/2-1/2
(?!"\]) : negative look ahead, zero-length assertion that make sure we don't have "] after
这与给定示例中的块 2 和块 3 匹配。