正则表达式根据匹配字符串提取完整词库

2024-10-03 15:34:21 发布

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

有人能帮我吗?这里我试着从给定的句子中提取单词,其中包含G,ML,KG,L,ML,PCS和数字。 我可以匹配字符串,但不确定如何提取comlpete单词

例如,我的输入是“此数据包包含250G日期”,输出应该是250G 另一个例子是“你买了2公斤苹果”,产量应该是2公斤

在正则表达式中,我只得到匹配字符串,而不是完整的单词:(

import re
val = 'FUJI ALUMN FOIL CAKE, 240G, CHCLTE'
key_vals = ['G','GM','KG','L','ML','PCS']
re.findall("\d+\.?\d*(\s|G|KG|GM|L|ML|PCS)\s?", val)


Tags: 字符串苹果re数字val数据包单词ml
3条回答

使用非分组括号(?:)代替普通括号。不分组括号findall返回与整个模式匹配的字符串

此正则表达式无法满足您的需要:

re.findall("\d+\.?\d*(\s|G|KG|GM|L|ML|PCS)\s?", val)

让我们把它分解一下:

  • \d+:一个或多个数字
  • \.?:一个点(可选,如问号所示)
  • \d*:一个或多个可选数字
  • (\s|G|KG|GM|L|ML|PCS):一组备选方案,但空格是其中的一个选项,它应该在组外:您可能想要的是允许数字和单位之间的可选空格,即:240G或240G
  • \s?:可选空白

更好的表达方式可以是:

re.findall("\d+\s*(?:G|KG|GM|L|ML|PCS)", val)

这意味着:一个或多个数字,后跟可选空格,然后是以下任一单位:G | KG | GM | L | ML | PCS

注意?:的存在表示非捕获组。如果没有它,表达式将返回G

尝试使用此正则表达式:

\d+\s*(G|KG|GM|L|ML|PCS)\s?

它匹配以至少一个数字开头的每个字符串,然后后跟一个单位。数字和单位之间以及单位后面也可以有空格

按照您想要的方式进行调整:)

相关问题 更多 >