我有多行如下,其中“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/