java - 正则表达式:匹配逗号后不跟数字

标签 java regex regex-lookarounds

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

  1. foo(酒吧,1)。 > 需要“foo”、“bar”和“1”
  2. foo(酒吧,1.1)。 > 需要“foo”、“bar”和“1.1”
  3. 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 组(负向前看不会影响第一个逗号)

这是Debuggex example

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

最佳答案

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

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

关于java - 正则表达式:匹配逗号后不跟数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21165706/

相关文章:

java - 给 DockLayoutPanel CENTER 区域一个样式名称属性?

java - 如何删除注入(inject)的 View ?

javascript - 从后面拆分字符串

c# - 如何构建正则表达式以匹配由空格分隔的固定字符串?

java - 存储并遍历排序的文件hdfs/spark

python - 正则表达式无法识别 '#' 来删除

javascript - 使用正则表达式替换行中的 N 个字符串,其中 N 个字符串在行中可以具有任意顺序

正则表达式:匹配模式但排除一种情况

java - Dijkstra、广度优先还是塔防 A*?