正则表达式只匹配逗号而不是括号?

我有一个类似于以下内容的字符串:

12,44,foo,bar,(23,45,200),6

我想创建一个与逗号匹配的正则表达式,但仅匹配不在括号内的逗号(在上面的示例中,除了23和45之后的两个逗号之外,所有逗号都匹配)。我将如何做(Java正则表达式,如果有所不同)?


慕无忌1623718
浏览 1730回答 3
3回答

至尊宝的传说

假定没有嵌套的括号(否则,您不能使用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);此正则表达式使用否定的超前断言来确保下一个括号(如果有)不是闭合括号。只有这样,逗号才允许匹配。

江户川乱折腾

我不理解对正则表达式的这种迷恋,因为它们不适合用于它们所执行的大多数任务。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);}(当然,这假定始终有一个右括号和一个匹配的右括号出现在后面)。
打开App,查看更多内容
随时随地看视频慕课网APP