如何用正则匹配Pandas Series中可变数字前缀的重量单位字符串?
提取Pandas Series中的产品重量字符串
问题背景
现有如下Pandas Series产品名称数据:
import pandas as pd s = pd.Series({0: 'Açúcar Refinado UNIÃO Pacote 1kg', 1: 'Açúcar Refinado QUALITÁ Pacote 1Kg', 2: 'Açúcar Refinado DA BARRA Pacote 1kg', 3: 'Açúcar Refinado CARAVELAS Pacote 1kg', 4: 'Açúcar Refinado GUARANI Pacote 1Kg', 5: 'Açúcar Refinado Granulado Doçúcar UNIÃO Pacote 1kg', 6: 'Açúcar Refinado Light UNIÃO Fit Pacote 500g', 7: 'Açúcar Refinado Granulado Premium UNIÃO Pacote 1kg', 8: 'Açúcar Refinado UNIÃO 1kg - Pacote com 10 Unidades', 9: 'Açúcar Refinado Granulado em Cubos UNIÃO Pote 250g', 10: 'Açúcar Refinado Granulado Premium Caravelas Pacote 1kg', 11: 'Acucar Refinado Uniao 1kg'})
需要提取其中代表产品重量的字符串(如1kg、500g),此前尝试的正则表达式无法适配重量前数字位数不固定的情况:
import re s.str.extract(r"(.kg)|(.g)", flags = re.IGNORECASE)
解决方案
使用以下正则表达式即可匹配任意位数数字+重量单位的组合,同时支持大小写忽略:
s.str.extract(r"(\d+[kK]?[gG])", flags=re.IGNORECASE)
正则表达式说明
\d+:匹配1个或多个数字,解决数字位数不固定的问题[kK]?:可选匹配字母k/K,兼容kg和g两种单位格式[gG]:匹配字母g/G,覆盖大小写不同的单位写法- 外层括号
()用于捕获需要提取的目标内容
执行结果
运行上述代码后,将得到包含所有重量字符串的Series:
0 1kg 1 1Kg 2 1kg 3 1kg 4 1Kg 5 1kg 6 500g 7 1kg 8 1kg 9 250g 10 1kg 11 1kg dtype: object
内容的提问来源于stack exchange,提问作者INGl0R1AM0R1
相关产品推荐
相关产品推荐

