如何扩展正则表达式以匹配数量、单位、物品及附加信息
扩展后正则表达式
^(?:(0|[1-9]\d*(?:\.\d+)?)\s+)?([a-zA-Z]{1,6}\s+)?([^,(\n]+?)\s*(.*)?$
捕获组说明
- 第1组:数量,仅在字符串开头存在数字时捕获,兼容整数、小数格式,和你原有正则的数字匹配逻辑一致
- 第2组:单位,仅在数量后存在短字母单位(如tbps、l)时捕获,你可以根据实际单位的字符规则调整
[a-zA-Z]{1,6}的匹配范围 - 第3组:物品名称,自动截取到第一个逗号
,或左括号(之前的内容,自动去除首尾空格 - 第4组:后缀内容,匹配第一个逗号或左括号之后的所有剩余内容,不存在时为空
测试用例匹配效果
针对你给出的可处理字符串示例,匹配结果如下:
1 tbps olive oil:组1=1、组2=tbps、组3=olive oil、组4=``0.1 l olive oil,:组1=0.1、组2=l、组3=olive oil、组4=,1.5 tomatoes, dried:组1=1.5、组2=``、组3=tomatoes、组4=, dried2 red tomatoes (cutted):组1=2、组2=``、组3=red tomatoes、组4=(cutted)tomatoes, cutted (something else):组1=、组2=、组3=tomatoes、组4=, cutted (something else)
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

