我想从类似命令的字符串中提取一些组,格式如下:
- foo(酒吧,1)。 > 需要“foo”、“bar”和“1”
- foo(酒吧,1.1)。 > 需要“foo”、“bar”和“1.1”
- foo(bar-{foo,bar},1.1)。 > 需要“foo”、“bar-{foo,bar}”和“1.1”
因此第一个参数中可以出现逗号!
由于第二个参数始终以数字开头,因此我可以匹配第一个参数逗号(后面不跟数字),但我无法使用前瞻来做到这一点:(
这是我迄今为止的尝试:
(\w+)\(([a-zA-Z0-9_\-\{\}~]+)(,(\d+(\.\d+)?))?\)\.
...但示例 3 与此不匹配。
(\w+)\(([a-zA-Z0-9_\-\{\}~\,(?!\d)]+)(,(\d+(\.\d+)?))?\)\.
...这个不会让我捕获 > 2 组(负向前看不会影响第一个逗号)
任何帮助将不胜感激!非常感谢:)
最佳答案
如果 {} 应该包含任何内容,那么这可能会起作用吗?
(\w+)\(([a-zA-Z0-9_\-~]+(\{.*\})?),(.+)\)\.
关于java - 正则表达式:匹配逗号后不跟数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21165706/