用于忽略形容词和无关词的正则表达式

2024-03-29 11:58:37 发布

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

我一直在研究一个正则表达式来解析来自各种在线来源的食谱列表,我一直很难让正则表达式忽略食谱中的形容词和限定词

例如,如果配方要求“1整汤匙辣椒粉”,我希望我的正则表达式忽略“整汤匙”并返回“1”、“汤匙”和“辣椒粉”。为此,我提出:

(\d\/?\d?) ([\w]+?)?? ?(cup|tablespoon|teaspoon)? ([\w\s]+)

只要有一个测量方法,它似乎工作得很好。但对于像“一个鸡蛋”或“两个葱”这样的东西,它并不匹配

有没有办法使正则表达式不仅在没有测量值的情况下匹配,而且将成分(即“鸡蛋”)与有测量值的成分放在同一组(第4组)中


Tags: 列表来源配方情况鸡蛋cup成分食谱
1条回答
网友
1楼 · 发布于 2024-03-29 11:58:37

最好将空格也包括在括号中,这样它们就只能匹配在一起了。为“四舍五入”提供两个匹配项:后面有空格和没有空格,因此只需使用第二个:

>>> re.findall("(\d\/?\d?) (([\w]+?) )?((cup|tablespoon|teaspoon) )?([\w\s]+)", "1 rounded tablespoon paprika")
[('1', 'rounded ', 'rounded', 'tablespoon ', 'tablespoon', 'paprika')]

>>> re.findall("(\d\/?\d?) (([\w]+?) )?((cup|tablespoon|teaspoon) )?([\w\s]+)", "1 tablespoon paprika")
[('1', 'tablespoon ', 'tablespoon', '', '', 'paprika')]

>>> re.findall("(\d\/?\d?) (([\w]+?) )?((cup|tablespoon|teaspoon) )?([\w\s]+)", "1 egg")
[('1', '', '', '', '', 'egg')]

相关问题 更多 >