正则表达式匹配数量失败求助:如何精准提取目标数字
正则匹配文本中的数量问题
问题场景
需要从一段包含产品、数量、价格的文本中精准提取指定的数量值,尝试的正则无法得到预期结果。
待匹配文本
qty 2 MBC102 Rs. 1,890 required 2unit MBC 103 mbc 104 2pcs @5000 MBC 1011 @4000 4 pc Price 5000 3pcs MBC1012 100rolls MBC1013 500 pc MBC1014 2pcs mbc 1015 qty 2 @ 20000 unit 2 @900 MbC-1016 rolls 150 5000Rs mbc909 mbC 890 56 qty @ 5000 mbC 820 qty 90 @25000
期望提取的数量
2 2 2 4 3 100 500 2 2 150 56 90
尝试过的无效正则
(?i)^(?!qty|unit|pc|pcs|roll|rolls).[0-9]+
解决方案
先梳理目标数量的规律:
- 要么是
qty关键词后的数字,要么是unit/pc/pcs/rolls这类单位前的数字 - 要排除价格类数字(比如带
Rs.的金额、@后的标价)
使用以下正则即可精准匹配:
(?i)(?:qty\s+|(?<=\s)|^)(\d+)(?=\s*(?:unit|pc|pcs|rolls|$)|(?=\s+qty))
正则直白解释
(?i):忽略大小写,适配文本里大小写混合的内容(?:qty\s+|(?<=\s)|^):限定数字的前置条件,确保不会误抓产品型号里的数字(比如MBC102里的102)(\d+):这就是我们要提取的纯数字数量,用括号单独捕获方便获取结果(?=\s*(?:unit|pc|pcs|rolls|$)|(?=\s+qty)):限定数字的后置条件,只抓紧跟单位、行尾,或者后面跟着qty的数字,排除价格类数值
测试后完全能匹配到所有预期的数量值,直接提取每个匹配结果的捕获组内容即可。
内容的提问来源于stack exchange,提问作者Sonia Butt
相关产品推荐
相关产品推荐

