【发布时间】:2020-02-21 08:44:46
【问题描述】:
正如标题所示,我如何使用正则表达式捕获不成对的括号或括号,准确地说,在java中,对于java来说是新手。例如,假设我有下面的字符串;
Programming is productive, (achieving a lot, and getting good results), it is often 1) demanding and 2) costly.
如何捕获 1) 和 2)。 我试过了:
([^\(\)][\)])
但是,我得到的结果包括如下的 s),而不是 1) 和 2):
s), 1) and 2)
我检查了链接:Regular expression to match balanced parentheses,但是,这个问题似乎是指递归或嵌套结构,这与我的情况完全不同。 我的情况是匹配右括号或右括号,以及没有关联左括号或括号的任何关联文本。
【问题讨论】:
-
Regular expression to match balanced parentheses 的可能重复项。正则表达式不是这项工作的正确工具,但它可以通过递归正则表达式来完成——第三个投票最多的答案中有一个 Java 部分。
-
我认为 OP 不想匹配平衡括号。他们想要匹配右括号或右括号,以及没有关联左括号或括号的任何关联文本。
-
@WJS,确切的情况或期望的结果。
-
@DerickMarfo 我有一个解决方案,但不是
regex,所以我没有发布它。它使用一个简单的堆栈并跟踪括号。 -
@ggorlen 很抱歉回复晚了,但是,对于任意嵌套的括号,我相信下面会为任意嵌套括号的完整外部组完成工作:
(?=\()(?:(?=.*?\((?!.*?\1)(.*\)(?!.*\2).*))(?=.*?\)(?!.*?\2)(.*)).)+?.*?(?=\1)[^(]*(?=\2$)和以下匹配内部组太:(?=\()(?=((?:(?=.*?\((?!.*?\2)(.*\)(?!.*\3).*))(?=.*?\)(?!.*?\3)(.*)).)+?.*?(?=\2)[^(]*(?=\3$)))。借自此博客:[drregex.com/2017/11/match-nested-brackets-with-regex-new.html]
标签: java regex match parentheses brackets