gpt4 book ai didi

javascript - 使用正则表达式在pgn(棋子)中的“注释”周围添加花括号

转载 作者:行者123 更新时间:2023-11-28 01:27:43 27 4
gpt4 key购买 nike

编辑:要查看JS函数的工作版本,see the accepted answer in this followup thread

编辑:我使用的最终正则表达式是这样的:

var pattern = /((?:\s?[\(\)]?\s?[\(\)]?\s?[0-9]{1,3}\.{1,3}\s[NBRQK]?[a-h1-8]?x?[a-hO][1-8-][O-]{0,3}[!?+#=]{0,2}[NBRQ]?[!?+#]{0,2}(?:\s[NBRQK]?[a-h1-8]?x?[a-hO][1-8-][O-]{0,3}[!?+#=]{0,2}[NBRQ]?[!?+#]{0,2})?\s?[()]?\s?[()]?\s?)+)|((?:(?!\s?[\(\)]?\s?[\(\)]?\s?[0-9]{1,3}\.{1,3}\s[NBRQK]?[a-h1-8]?x?[a-hO][1-8-][O-]{0,3}[!?+#=]{0,2}[NBRQ]?[!?+#]{0,2})[^\)\(])+)|((?:\)\s\())/g;




我正在将一堆国际象棋游戏转录成官方PGN格式。通常,PGN格式的“注释”放在大括号内(例如“ {blah blah blah}”)。我的游戏来源是MS Word文档,其中游戏采用“象棋”格式格式化,注释周围没有大括号。

这是我的正则表达式,它与“象棋动作”的所有块都匹配,仅保留注释不匹配的内容。根据测试,我认为我已经做到了95%正确。

var re = /(/(\s?[\(\)]?\s?[\(\)]?\s?[0-9]{1,3}\.{1,3}\s[NBRQK]?[a-h1-8]?x?[a-hO][1-8\-][!?+#=O-]{0,2}[NBRQ]*[!?+#]{0,2}(\s[NBRQK]?[a-h1-8]?x?[a-hO][1-8\-][!?+#=O-]{0,2}[NBRQ]*[!?+#]{0,2})?\s?[\(\)]?\s?[\(\)]?\s?)+/gm;


您可以在这里看到我长得令人难以置信的正则表达式,以及以下示例pgn: http://regex101.com/r/dI8sQ8

[注:这块

[NBRQK]?[a-h1-8]?x?[a-hO][1-8\-][!?+#=O-]{0,2}[NBRQ]*[!?+#]{0,2} 


它找到棋子动作,因此在较大的表达式中重复两次,因为有时注释仅在白色移动(1. e4注释)之后出现,有时仅在黑色移动(1 ... e5注释)之后出现,有时在白色之后和黑色一起移动(1. e4 e5评论)]

到目前为止,我可以匹配所有的动作块了……除了注释之外,所有的一切。剩下的就是用自己加上“}”之前和之后的“ {”(可能跳过字符串的开头和结尾)本身来替换这些匹配的移动块。

我尝试了这两个替换功能:

str = str.replace(re,{\1});
str = str.replace(re,{$1});


我看到有人在这里做的\ 1事情是: regular expression to add brackets before and after a repeated text

我看到了有关$ 1美元的东西的文档。我想我不太了解其中的区别,而且似乎也没有用。

您可以在链接的示例中看到另外一个皱纹,即注释有时出现在变体中(以“(”和“)”分隔),如果一个变体以注释结束,而另一个变体以注释开始,则看起来像“)(”,我们想将其更改为“})({”
...但是我认为,在我们遍历并将大部分{与该表达式一起添加之后,)使用第二个正则表达式将很容易。

在此先感谢您的帮助。某些信息告诉我,我已经完成了艰苦的工作,而我只是不了解语法$ 1或\ 1

编辑:这是我正在使用的pgns之一的示例。

哈巴罗夫斯克是俄罗斯远东的首都。我16岁的对手是一个很有前途的本地神童。现在他是一个非常强大的FM,FIDE等级为2437,并且也住在美国!一个小世界。 1. e4 c5 2. Nf3 e6 3. c3 Nf6 4. e5 Nd5 5. d4 cxd4 6. cxd4 d6 7. Nc3 Nc6 8. Bd3 !? Nxc3 9. bxc3 dxe5 10. dxe5 Qa5 11. O-O Be7 12. Qb3 Nxe5 13. Nxe5 Qxe5 14. Bb5 + Kf8 15. Ba3 Qc7 16. Rad1 g6 17. c4! Bxa3 18. Qxa3 + Kg7 19. Rd6 Rd8 20. c5 Bd7 21. Bc4 Bc6 22. Rfd1 Rd7 23. Qg3 Rad8最后,准确,稳定的表现黑色已经巩固了,但是White仍然保持着一定的压力,并且对典当有所补偿。 24. h4在这样的位置进行一次典型的行军,根本没有其他事情可以做得更好。 24 ... h5 ?! (24 ... h6会是一个更谨慎的响应。)(但是最好的防御是24 ... Rd6!25. cd6 Qa5)25. Qe5 + Kh7 26. Bd3很自然的26 ... Kh6吗? (缺少26 ... Ba4!27. Qxh5 + Kg7 28. Qe5 + Kg8 !,现在黑方有很多威胁。白方必须在29. h5之后强制永久使用。Bxd1 30. h6 f6 31. Qxf6 Bh5 32. Qxe6 + Kh7 33. Bxg6 + Bxg6 34. Qxg6 + Kh8 35. Qf6 +现在,在26 ... Kh6之后,一切准备就绪,准备起决定性的打击。)27. Qf6! Kh7(没有27 ... Rxd6 28. cxd6 Rxd6?由于29. Qh8#)28. g4! hxg4 29. h5 Rxd6 30. cxd6 Rxd6 31. hxg6 + Kg8 32. g7!直到现在结束,这个棋子都是至关重要的因素。怀着其他任何举动,怀特输了。 32 ... Qd8!对抗Qh6和Qh8配对或修饰的唯一防御。 33. Qh6 f5 34. Rd2 !!这个想法是白车不能再带支票了。主教将轻松地使用粉碎的Bxf5或Bc4。 d文件上的黑色大头针是一种幻想!实际上,这是布莱克的骗子,无法固定d文件。 34 ... Bd5(最好的尝试-用更多e6典当保护关闭d文件。没有帮助是34 ... Rd7 35. Bf5 ef5 36. Qh8 Kf7 37. Rd7)(但是,最好的实践机会是34。 .. g3!?,现在是35。由于35 ... gxf2 + 36. Kh2 f1 = N +!37. Kh3 Bg2 +!38. Rxg2 Rd3 +!39. Bxd3 Qxd3 +具有惊人的永久性40. Kh4 Qe4 + 41. Rg4 Qh1 + 42. Kg5 Qd5 + 43. Kf6 Qd8 + 44. Kg6 Qd3 +)(但是在34 ... g3 !?白方之后,他使用另一种机翼战术获胜:35. Bc4!Bd5 36. Bxd5 exd5 37. Qh8 + Kf7 38. Rc2 gxf2 + 39. Kf1!并没有针对Rc8的防御。现在在35 ... Bd5之后,一切看起来都得到了很好的保护。)35. Qh8 Kf7 36. Bb5!主教仍在继续前进。即将到来的Be8是杀手er。 36 ... Qg8 37. Be8 +! Qxe8 38. Qe8 + Kxe8 39. g8 = Q + Kd7 40. Qg7 +这是怀特的第40步,这意味着时间控制对我而言已经结束。我时间很短。一个皇后只用一块和三个棋子是不够的。黑方辞职。 1-0

最佳答案

我认为您可以在一个正则表达式中匹配移动/注释。
只需建立一个新字符串即可。在下面,Capture grp 1是动作,grp2是注释。

编辑-简单的更改。为了在JS中支持Dot-All,将.更改为[\S\s]

    # /((?:\s?[()]?\s?[()]?\s?[0-9]{1,3}\.{1,3}\s[NBRQK]?[a-h1-8]?x?[a-hO][1-8-][!?+#=O-]{0,2}[NBRQ]*[!?+#]{0,2}(?:\s[NBRQK]?[a-h1-8]?x?[a-hO][1-8-][!?+#=O-]{0,2}[NBRQ]*[!?+#]{0,2})?\s?[()]?\s?[()]?\s?)+)|((?:(?!\s?[()]?\s?[()]?\s?[0-9]{1,3}\.{1,3}\s[NBRQK]?[a-h1-8]?x?[a-hO][1-8-])[\S\s])+)/

( # (1 start), Moves
(?:
\s?
[()]? \s? [()]?
\s?
[0-9]{1,3} \.{1,3}
\s
[NBRQK]? [a-h1-8]? x? [a-hO] [1-8-] [!?+#=O-]{0,2} [NBRQ]* [!?+#]{0,2}
(?:
\s
[NBRQK]? [a-h1-8]? x? [a-hO] [1-8-] [!?+#=O-]{0,2} [NBRQ]* [!?+#]{0,2}
)?
\s?
[()]? \s? [()]?
\s?
)+
) # (1 end)
|
( # (2 start), Comments
(?:
(?!
\s?
[()]? \s? [()]?
\s?
[0-9]{1,3} \.{1,3}
\s
[NBRQK]? [a-h1-8]? x? [a-hO] [1-8-]
)
[\S\s] # Changed from `.` JS doesn't support Dot-All
)+
) # (2 end)


Perl测试用例

$/ = undef;

$str = <DATA>;

$newstr = '';

while ( $str =~ /((?:\s?[()]?\s?[()]?\s?[0-9]{1,3}\.{1,3}\s[NBRQK]?[a-h1-8]?x?[a-hO][1-8-][!?+#=O-]{0,2}[NBRQ]*[!?+#]{0,2}(?:\s[NBRQK]?[a-h1-8]?x?[a-hO][1-8-][!?+#=O-]{0,2}[NBRQ]*[!?+#]{0,2})?\s?[()]?\s?[()]?\s?)+)|((?:(?!\s?[()]?\s?[()]?\s?[0-9]{1,3}\.{1,3}\s[NBRQK]?[a-h1-8]?x?[a-hO][1-8-])[\S\s])+)/g )
{
if (defined $1) {
$newstr .= $1;
}
else {
$newstr .= '{' . $2 . '}';
}
print "'$&'\n";
}

print "---------------\n";
print $newstr;


__DATA__
Khabarovsk is the capital of Far East of Russia. My 16-year-old opponent was a promising local prodigy. Now he is a very strong FM with a FIDE rating of 2437 and lives... in the USA, too! A small world. 1. e4 c5 2. Nf3 e6 3. c3 Nf6 4. e5 Nd5 5. d4 cxd4 6. cxd4 d6 7. Nc3 Nc6 8. Bd3!? Nxc3 9. bxc3 dxe5 10. dxe5 Qa5 11. O-O Be7 12. Qb3 Nxe5 13. Nxe5 Qxe5 14. Bb5+ Kf8 15. Ba3 Qc7 16. Rad1 g6 17. c4! Bxa3 18. Qxa3+ Kg7 19. Rd6 Rd8 20. c5 Bd7 21. Bc4 Bc6 22. Rfd1 Rd7 23. Qg3 Rad8 Finally with accurate, solid play Black has consolidated yet White still keeps some pressure and has some compensation for the pawn. 24. h4 A typical march in such positions, simply nothing else to do better. 24... h5?! ( 24... h6 would be a more careful response. ) ( But the best defense was 24... Rd6! 25. cd6 Qa5 ) 25. Qe5+ Kh7 26. Bd3 Very natural 26... Kh6? ( Missing 26... Ba4! 27. Qxh5+ Kg7 28. Qe5+ Kg8! and now Black has many own threats. White would have to force a perpetual after 29. h5! Bxd1 30. h6 f6 31. Qxf6 Bh5 32. Qxe6+ Kh7 33. Bxg6+ Bxg6 34. Qxg6+ Kh8 35. Qf6+ Now, after 26...Kh6 everything is ready for preparing a decisive blow. ) 27. Qf6! Kh7 ( There is no 27... Rxd6 28. cxd6 Rxd6? due to 29. Qh8# ) 28


输出>>

 'Khabarovsk is the capital of Far East of Russia. My 16-year-old opponent was a promising local prodigy. Now he is a very strong FM with a FIDE rating of 2437 and lives... in the USA, too! A small world.'
' 1. e4 c5 2. Nf3 e6 3. c3 Nf6 4. e5 Nd5 5. d4 cxd4 6. cxd4 d6 7. Nc3 Nc6 8. Bd3!? Nxc3 9. bxc3 dxe5 10. dxe5 Qa5 11. O-O Be7 12. Qb3 Nxe5 13. Nxe5 Qxe5 14. Bb5+ Kf8 15. Ba3 Qc7 16. Rad1 g6 17. c4! Bxa3 18. Qxa3+ Kg7 19. Rd6 Rd8 20. c5 Bd7 21. Bc4 Bc6 22. Rfd1 Rd7 23. Qg3 Rad8 '
'Finally with accurate, solid play Black has consolidated yet White still keeps some pressure and has some compensation for the pawn.'
' 24. h4 '
'A typical march in such positions, simply nothing else to do better.'
' 24... h5?! ( 24... h6 '
'would be a more careful response. ) ( But the best defense was'
' 24... Rd6! 25. cd6 Qa5 ) 25. Qe5+ Kh7 26. Bd3 '
'Very natural'
' 26... Kh6? ( '
'Missing'
' 26... Ba4! 27. Qxh5+ Kg7 28. Qe5+ Kg8! '
'and now Black has many own threats. White would have to force a perpetual after'
' 29. h5! Bxd1 30. h6 f6 31. Qxf6 Bh5 32. Qxe6+ Kh7 33. Bxg6+ Bxg6 34. Qxg6+ Kh8 35. Qf6+ '
'Now, after 26...Kh6 everything is ready for preparing a decisive blow.'
' ) 27. Qf6! Kh7 ( '
'There is no'
' 27... Rxd6 28. cxd6 Rxd6? '
'due to'
' 29. Qh8# ) '
'28'
---------------
{Khabarovsk is the capital of Far East of Russia. My 16-year-old opponent was a promising local prodigy. Now he is a very strong FM with a FIDE rating of 2437 and lives... in the USA, too! A small world.} 1. e4 c5 2. Nf3 e6 3. c3 Nf6 4. e5 Nd5 5. d4 cxd4 6. cxd4 d6 7. Nc3 Nc6 8. Bd3!? Nxc3 9. bxc3 dxe5 10. dxe5 Qa5 11. O-O Be7 12. Qb3 Nxe5 13. Nxe5 Qxe5 14. Bb5+ Kf8 15. Ba3 Qc7 16. Rad1 g6 17. c4! Bxa3 18. Qxa3+ Kg7 19. Rd6 Rd8 20. c5 Bd7 21. Bc4 Bc6 22. Rfd1 Rd7 23. Qg3 Rad8 {Finally with accurate, solid play Black has consolidated yet White still keeps some pressure and has some compensation for the pawn.} 24. h4 {A typical march in such positions, simply nothing else to do better.} 24... h5?! ( 24... h6 {would be a more careful response. ) ( But the best defense was} 24... Rd6! 25. cd6 Qa5 ) 25. Qe5+ Kh7 26. Bd3 {Very natural} 26... Kh6? ( {Missing} 26... Ba4! 27. Qxh5+ Kg7 28. Qe5+ Kg8! {and now Black has many own threats. White would have to force a perpetual after} 29. h5! Bxd1 30. h6 f6 31. Qxf6 Bh5 32. Qxe6+ Kh7 33. Bxg6+ Bxg6 34. Qxg6+ Kh8 35. Qf6+ {Now, after 26...Kh6 everything is ready for preparing a decisive blow.} ) 27. Qf6! Kh7 ( {There is no} 27... Rxd6 28. cxd6 Rxd6? {due to} 29. Qh8# ) {28}

关于javascript - 使用正则表达式在pgn(棋子)中的“注释”周围添加花括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22487483/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com