正则表达式 - 仅在组存在时捕获,如果不存在则捕获

时间:2014-09-04 13:59:59

标签: regex

我有这个正则表达式

(\w+)\s*\:\s*(\W\d+)

设置为匹配类似

的内容
"price: $200"

我需要做些什么才能更改它以匹配"price: $200""$200"(如果价格:部分不存在)

我试过

(?:(\w+)\s*\:\s*)*(\W\d+)

但这不起作用,因为它给了我第一个空搭配

3 个答案:

答案 0 :(得分:3)

怎么样:

(\w+\s*:\s*)?(\W\d+)

?表示该组将显示1或0次。您可以添加自己的捕获组以方便数据获取。

答案 1 :(得分:0)

将第一部分设为可选:

^(?|(\w+\s*:)\s*(\W\d+)|(\W\d+))

RegEx Demo

它会为price: $200提供 2个捕获组,但为$200提供只有一个捕获组作为输入。

答案 2 :(得分:0)

(?=.*?:)(\S+)\s*:\s*(\S+)|(\S+)

你也可以使用lookeahead。

参见演示。

http://regex101.com/r/oO8zI4/5