为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕无忌1623718 2019-09-26 10:43:42
我有一个类似于以下内容的字符串: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);

此正则表达式使用否定的超前断言来确保下一个括号(如果有)不是闭合括号。只有这样,逗号才允许匹配。


查看完整回答
反对 回复 2019-09-26
?
江户川乱折腾

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);}

(当然,这假定始终有一个右括号和一个匹配的右括号出现在后面)。


查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 1643 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信