在python中使用regex从描述中提取项的权重

2024-05-13 22:33:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份产品说明的清单。例如:

 items = ['avuhovi Grillikaapeli 320g','Savuhovi Kisamakkara 320g',
'Savuhovi Raivo 250g', 'AitoMaku str.garl.sal.dres.330ml', 'Rydbergs
 225ml Hollandaise sauce']

我想提取的重量是,320g,320g,250ml,330ml,我知道我们可以使用regex来提取,但不知道如何构建regex来提取。您可以看到,权重有时位于描述的中间,有时使用点(.)作为分隔符,而不是空格。所以,我很困惑如何提取。在

提前感谢您的帮助:)


Tags: 产品itemsmlregexstrsalgrillikaapeliaitomaku
2条回答

https://regex101.com/r/gy5YTp/4

\d+匹配任何数字,然后用(?:ml|g)创建一个匹配但没有选择的组,这将匹配ml或g

import re

items = ['avuhovi Grillikaapeli 320g', 'Savuhovi 333ml Kisamakkara 320g', 'Savuhovi Raivo 250g', 'AitoMaku str.garl.sal.dres.330ml', 'Rydbergs 225ml Hollandaise sauce']

groupedWeights = [re.findall('(\d+(?:ml|g))', i) for i in items]
flattenedWeights = [y for x in groupedWeights for y in x]

print(flattenedWeights)

我们所做的匹配返回找到的权重列表的列表,因此我们需要用[y for x in groupedWeights for y in x]将其展平

如果你在一个元素中有一个以上的权重。否则我们可以像这样获取每个列表的第一个元素。在

^{pr2}$

下面是一个可行的解决方案(使用Wiktor建议的search和{}):

>>> for t in items :
...   re.search(r'([0-9]+(g|ml))', t).group(1)
... 
'320g'
'320g'
'250g'
'330ml'
'225ml'

实际上,更好的解决方案(感谢Wiktor)是测试是否存在匹配项:

^{pr2}$

相关问题 更多 >