栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

正则表达式删除嵌套括号

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

正则表达式删除嵌套括号

不要在这里使用正则表达式。从示例中您可以看到,类似的东西

\(.*?)\)
会尝试在首次建立
(
和下一个之间找到最小的匹配,
)
因此在诸如

a (b (c d) e) f

正则表达式

(.*?)
将匹配

a (b (c d) e) f  ^^^^^^^^

并且将留下

e)
无与伦比的部分。

您可能可以为此任务编写正则表达式,因为某些正则表达式类型支持递归,但不幸的是,Java中使用的正则表达式引擎不支持。

因此,要删除嵌套的括号,您可以编写自己的简单解析器,例如
(我假设文本格式正确,所以没有类似

({)}
或未封闭的括号之类的东西)

String data = "1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. dxe5 dxe5 8. Qxd8 Rxd8 9. Bg5 Nbd7 10. O-O-O {Diagram [#]} "        + "Rf8 (10... Re8 11. Nb5 (11. Nd5)) (10... h6 11. Bxf6 Bxf6 12. Nd5) 11. Nd5 c6 (11... Nxe4 12. Nxc7 Rb8 13. Be3 b6 ) 12. Ne7+ Kh8 13. "        + "Nxc8 Raxc8 14. Bxf6 (14. Be3) 14... Nxf6 15. Nd2 (15. Bd3) 15... Bh6 16. f3 Nd7 17. Kc2 Bxd2 (17... Rcd8 18. b4) 18. Rxd2 Nc5 19. b4 Ne6 20. Rd7 b5 "        + "(20... Rcd8 21. Rxb7 Nd4+ 22. Kd3) 21. Rxa7 Nd4+ 22. Kd3 Rcd8 23. Ke3 Nc2+ 24. Kf2 Rd2 25. Rd1 Rfd8 26. Rxd2 {Diagram [#]} (26. cxb5 cxb5 "        + "27. Rc7 Rxd1 28. Bxd1 Rd2+ 29. Kg3 Ne1 30. Bb3 f6 31. Rf7 Nxg2 32. Rf8+ Kg7 33. Rf7+ Kh6 34. Rxf6 Nf4 35. Kh4 (35. Rxf4 exf4+ 36. Kxf4 Rxh2) 35... "        + "Rxh2+ 36. Kg4 Rg2+ 37. Kh4 Nd3 38. a3 Rh2+ 39. Kg4 Rh1 40. Rc6 {Diagram [#]}) 26... Rxd2 27. Kf1 Nd4 28. cxb5 cxb5 29. a4 (29. Rd7 Rxa2 30. Bd3 Ra3 31. "        + "Be2 Ra1+ 32. Kf2 Ra2 ) (29. Bxb5 Nxb5) 29... Rxe2 (29... bxa4 30. Bc4) 30. axb5 Rb2 31. b6 Rxb4 32. b7 Kg7  ";StringBuilder buffer = new StringBuilder();int parenthesisCounter = 0;for (char c : data.toCharArray()) {    if (c == '(' || c == '{' )        parenthesisCounter++;    if (c == ')' || c == '}' )        parenthesisCounter--;    if (!(c == '(' || c == '{' || c == ')' || c == '}') && parenthesisCounter == 0)        buffer.append(c);}

之后,您可以像以前一样集中精力删除其余不需要的数据

.replaceAll(Pattern.quote("$") + "[0-9]+", "");

这样的结果

System.out.println(buffer.toString().replaceAll(        Pattern.quote("$") + "[0-9]+", ""));

将会

1. d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 O-O 6. Be2 e5 7. dxe5 dxe5 8.Qxd8 Rxd8 9. Bg5 Nbd7 10. O-O-O Rf8 11. Nd5 c6 12. Ne7+ Kh8 13. Nxc8 Raxc814. Bxf6 14... Nxf6 15. Nd2 15... Bh6 16. f3 Nd7 17. Kc2 Bxd2 18. Rxd2 Nc519. b4 Ne6 20. Rd7 b5 21. Rxa7 Nd4+ 22. Kd3 Rcd8 23. Ke3 Nc2+ 24. Kf2 Rd225. Rd1 Rfd8 26. Rxd2 26... Rxd2 27. Kf1 Nd4 28. cxb5 cxb5 29. a4 29... Rxe230. axb5 Rb2 31. b6 Rxb4 32. b7 Kg7



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506457.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号