【发布时间】:2014-02-05 14:11:48
【问题描述】:
我想从类似命令的字符串中提取一些组,格式如下:
- 富(酒吧,1)。 > 需要 'foo'、'bar' 和 '1'
- 富(酒吧,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 组(负前瞻不会影响第一个逗号)
任何帮助将不胜感激!非常感谢提前:)
【问题讨论】:
-
什么样的符号可以否定逗号?只有
{``}?你希望foo(bar[1,2],3)发生什么? -
您使用哪种语言?
-
@SamSullivan:只有 {} 否定逗号。其他情况不会发生。
-
@Bohemian:我正在使用 java
标签: java regex regex-lookarounds