java - 捕捉可能存在或不存在的值(value)

标签 java regex groovy

我有多行如下,其中“ProgressiveAwardWinnings”部分可能存在也可能不存在。我正在尝试从这些行中提取数字数据。

LineStake":5000.0,"Won":200, -something- ProgressiveAwardWinnings":10000 LineStake":5000.0,"Won":100, -something-

因此从第一行提取的信息将为 5000.0, 200, 10000,第二行将为 5000.0, 200, null。

我的正则表达式如下。两行的第三个值均显示为空。我期望捕获第 1 行的第三个值。请提供建议。

正则表达式

LineStake\":([0-9\.]+),\"Won\":([0-9\.]+),.*?(?:ProgressiveAwardWinnings\"\:([0-9]+))?

最佳答案

问题是 lazy .*? 尽可能匹配 0+ 个字符,并且在第一次正则表达式时被跳过引擎到达该模式部分,并尝试匹配其余模式。如果它们匹配,则 .*? 甚至不会被尝试,也不会扩展(?:...)? 非捕获组是可选的,它可以匹配空字符串。

因此,一旦 200 在第 1 行匹配,.*? 就会被跳过,并且 (?:...)? 会匹配200 后面有空格,并在该点返回匹配项。

解决方案是将.*?放入可选组中:

LineStake\":([0-9\.]+),\"Won\":([0-9\.]+),(?:.*?ProgressiveAwardWinnings\"\:([0-9]+))?
                                             ^^^

请参阅regex demo

关于java - 捕捉可能存在或不存在的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44564834/

相关文章:

servlets - 如何将 xml 编码为 Base64 并作为 servlet 响应发回?

java - 调用Jenkins插件(thinBackup)的内部方法

java - 导出后,java无法找到/绘制图像

java - Jackson将json数组反序列化为一个类的单个属性

java - HBase 连接拒绝

sql - 条件 "email ~* ' link1.com $'"是什么意思?

java - AspectJ 编织 : How to do a full code weave without static reference to the aspect?

javascript - 验证正则表达式问题

javascript - React - 使用 Object.keys.map 迭代时检查字符串中的空格

groovy - 通过 Groovy 中的嵌套闭包传递委托(delegate)