【发布时间】:2017-05-26 11:13:04
【问题描述】:
我不知道如何表达这个问题。长话短说,我想从In: a (b) 行中提取两个字符串(a、b)。在几乎所有情况下a=b,但以防万一,我已经将它们分开了。问题:两个字符串都可以包含任何字符,包括 Unicode、空格、标点符号和括号。
1: In: ThisName (ThisName) is in this list
2: In: OtherName (With These) (OtherName (With These)) is in this list
3: In: Really Annoying (Because) Separators (Really Annoying (Because) Separators) is in this list
第 1 行,简单:^\w+:\s(?'a'.+?)\s\((?'b'.+)\)a:ThisNameb:ThisName
第2行,和之前一样:a:OtherNameb: With These) (OtherName (With These)
第 2 行,懒惰:^\w+:\s(?'a'.+?)\s\((?'b'.+?)\)a:OtherNameb:With These
3 号线,总台
这可能吗?也许我需要走另一条路?我们知道需要一组括号。也许我必须走一条数学路线,计算括号的数量并找到那条路线来确定哪条路线实际上应该包含b?以某种方式计算每个打开和关闭。
我一直在玩什么:https://regex101.com/r/8YIweJ/2
顺便说一句,如果我可以更改输入格式,我肯定会的。
添加的问题:如果这不可能,是否一直假设a=b 会使这更容易?我想不出它会怎样。
【问题讨论】:
-
不能用非递归正则表达式匹配括号,Java 的正则表达式不是递归的。您的行是否总是在“重要”括号后加上“在此列表中”?
-
问题不清楚。您想在括号内分隔所有不同的字符串吗?即,带有标记 a(b)c(d(e))f 的字符串应该返回 a,b,c,d,e,f,其中每个 {x: [a,f]} 可以由一个或多个词?
-
@RealSkeptic "In:" 和 "is in this list" 将始终存在并以这种方式精确打印。
-
你能保证 A 和 B 的值中的括号(如果存在的话)总是匹配的吗?也就是说,您无法获得
Foo ( Bar或Great :-)之类的信息? -
@Amal 我希望
a和b在In: a (b) is in this list行中,例如In: A (Has These) (B is different but (Has These Too))将导致a:A (Has These)和b:B is different but (Has These Too)并使其更复杂,@987654345 @ 和b可以包含任何字符并且可以相同,所以会发生这种情况:In: A!@ (☢!) (A!@ (☢!))或In: A!@ (☢!) (Other Entirely)
标签: java regex pattern-matching match