我有一个类似于以下内容的字符串:12,44,foo,bar,(23,45,200),6我想创建一个与逗号匹配的正则表达式,但仅匹配不在括号内的逗号(在上面的示例中,除了23和45之后的两个逗号之外,所有逗号都匹配)。我将如何做(Java正则表达式,如果有所不同)?
3 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
假定没有嵌套的括号(否则,您不能使用Java Regex来完成此任务,因为不支持递归匹配):
Pattern regex = Pattern.compile( ", # Match a comma\n" + "(?! # only if it's not followed by...\n" + " [^(]* # any number of characters except opening parens\n" + " \\) # followed by a closing parens\n" + ") # End of lookahead", Pattern.COMMENTS);
此正则表达式使用否定的超前断言来确保下一个括号(如果有)不是闭合括号。只有这样,逗号才允许匹配。
江户川乱折腾
TA贡献1851条经验 获得超5个赞
我不理解对正则表达式的这种迷恋,因为它们不适合用于它们所执行的大多数任务。
String beforeParen = longString.substring(longString.indexOf('(')) + longString.substring(longString.indexOf(')') + 1);int firstComma = beforeParen.indexOf(',');while (firstComma != -1) { /* do something. */ firstComma = beforeParen.indexOf(',', firstComma + 1);}
(当然,这假定始终有一个右括号和一个匹配的右括号出现在后面)。
添加回答
举报
0/150
提交
取消