如何修正正则表达式,精准提取oz、ml单位前的对应数值?
修正方案
你原来的正则使用了贪婪匹配符.*,会从第一个出现的数字一直匹配到目标单位,导致中间无关内容被包含在内。直接分组捕获单位前紧邻的数值和对应单位即可解决问题:
- 修正后正则为:
r"(\d+\.?\d*)\s*(oz|ml)"(\d+\.?\d*):捕获整数/小数格式的数值\s*:兼容数值和单位之间存在空格的场景(oz|ml):匹配你指定的目标单位
- 把捕获到的数值和单位用空格拼接,即可得到符合要求的输出
完整可运行代码
import re import pandas as pd look_ahead = "oz|ml" s = pd.Series(['Bla bla 0.75 oz. Bottle', 'Mugs, 8oz. White', 'Bowls, 4.4" dia x 2.5", 12ml. Natural', 'Ala bala 3.3" 30ml Bottle']) size_and_units = s.str.findall(rf"(\d+\.?\d*)\s*({look_ahead})").str.join(" ") print(size_and_units)
运行输出
0 0.75 oz 1 8 oz 2 12 ml 3 30 ml dtype: object
内容的提问来源于stack exchange,提问作者hsnsd
相关产品推荐
相关产品推荐

