【发布时间】:2018-08-15 16:35:09
【问题描述】:
我正在尝试使用正则表达式从字符串中获取数量、单位和内容。单位和物质来自预定义的列表。
所以:
- “2公斤水”应该返回:
2, kg, water - “1 加仑原油”应返回:
1, gallon, oil
我可以使用以下正则表达式来实现这一点:
(\d*) ?(kg|ml|gallon).*(water|oil)
问题是我不知道如何使最后一个捕获组成为可选。如果物质不在预定义列表中,我仍然想获取数量和单位。所以:
- “1 加仑柴油”应返回:
1, gallon或1, gallon, ''
我已尝试将最后一个组包装在一个可选的非捕获组中,如下所述:Regex with optional capture fields 但没有成功。
这里是在线正则表达式测试器中的当前正则:https://regex101.com/r/hV3wQ3/55
【问题讨论】:
-
为什么不直接捕获
(\d+) ?(kg|ml|gallon) of (.*)并稍后查看预定义物质列表? -
使用
?量词它匹配0 到1 次。(water|oil)? -
@S.Jovan 那行不通。它总是无法捕获任何东西。
标签: regex capture-group