正则表达式:匹配逗号后面没有数字

时间:2014-01-16 15:18:42

标签: java regex regex-lookarounds

我想从类似命令的字符串中提取一些组,格式为:

  1. 了foo(bar,1)。 >需要'foo','bar'和'1'
  2. FOO(巴,1.1)。 >需要'foo','bar'和'1.1'
  3. FOO(酒吧,{FOO,酒吧},1.1)。 >需要'foo','bar- {foo,bar}'和'1.1'
  4. 所以第一个参数中可以出现逗号!

    由于第二个参数总是以数字开头,我可以匹配第一个参数逗号,后面没有数字,但是我不能用lookahead来做:(

    到目前为止,这是我的尝试:

    (\w+)\(([a-zA-Z0-9_\-\{\}~]+)(,(\d+(\.\d+)?))?\)\.
    

    ...但是示例3与此不匹配。

    (\w+)\(([a-zA-Z0-9_\-\{\}~\,(?!\d)]+)(,(\d+(\.\d+)?))?\)\.
    

    ......这个人不会让我抓住这些团体> 2(负向前瞻不影响第一个逗号)

    这是Debuggex example

    任何帮助将不胜感激!非常感谢提前:))

2 个答案:

答案 0 :(得分:2)

如果{}应该包含任何内容,那么这可能会有效吗?

(\w+)\(([a-zA-Z0-9_\-~]+(\{.*\})?),(.+)\)\.

答案 1 :(得分:1)

这似乎可以解决问题:

(.*?)(?:\(|\)|,(?=\d))

Expl。:将任何内容与'(',')'或','后跟数字匹配。

如果您想要允许任意空格:

\s*(.*?)\s*(?:\(|\)|,(?=\d))\s*

使用全局标志来获取所有实例。

此致