我无法编写正则表达式,在String.split(Java)表达式中使用,例如只能在逗号上拆分而不在括号中。
示例:
(54654,4565):( 45651,65423),4565:45651,(4565,4564):45651
应该产生3个字符串:
任何帮助非常感谢。
答案 0 :(得分:6)
你可以只用一个前瞻来做到这一点,这比看起来更容易使用。
String[] parts = str.split(",(?![^()]*+\\))");
但是其他响应者是对的:如果你不能自己想出这个正则表达式,当你的需求发生变化时你会怎么做?你可能更了解一个你真正理解的冗长解决方案。
答案 1 :(得分:0)
这有效:
String regex = "((?<!\\d),)|(,(?!\\d))";
但假设您在逗号或另一侧有一个数字而不是数字。所以,它并不是真的想看看你是否在内部,而是希望看到它不会分裂为只被数字包围的逗号。
因此,如果您正在查看此文:
"45651:65423,4565:45651"
然后此解决方案失败(作为示例)。如果您更具体地了解您期望的投入类型,我们可以根据您的情况量身定制答案。
答案 2 :(得分:0)
提醒您,如果有任何嵌套,您需要小心。正则表达式并不是很擅长这一点。请考虑以下代码段:
(一)B,(C,(d)E,)
根据您的问题,您只想匹配逗号b
。诀窍在于表达式通常是完全贪婪或完全不贪婪,几乎没有中间立场。
一个贪婪的表达式会在细分的最开始看到(
,在最后看到)
并在其中看到所有,无论是否关闭其他地方的括号。 没有什么会匹配。
从开头开始,一个不同意的表达式只会采用最小的表达式。它会匹配逗号b
,但也会将此细分视为一个单元:(c,(d,)
。然后它也会继续匹配逗号e
,因为它已经是最后一个(
。
有一些引擎允许你处理嵌套级别,但表达式通常很丑陋且难以维护:除非你真正理解它,否则最好避免使用该功能。