我正在使用 Python。
我有一些字符串:
'1 banana', '100 g of sugar', '1 cup of flour'
我需要从数量上区分食物。 我有一个数量类型的数组
数量 = ['g', 'cup', 'kg', 'L']
altern = '|'.join(数量)
因此,通过使用正则表达式,我想为 '1 cup of flour'
获取示例:'flour'
和 '1 cup of flour '
,对于 '1 banana'
:'1'
和 'banana'
我写了这个正则表达式来匹配上面字符串的数量部分:
\d{1,3}\s<altern>?\s?(\bof\b)?
但我对此非常不确定......特别是关于如何在正则表达式中引入 altern 变量。
最佳答案
我认为您的 amounts
是 units
,所以我冒昧地修正了这个用词不当的问题。我建议使用命名分组来简化对输出的理解。
import re
units = [ 'g', 'cup', 'kg', 'L' ]
anyUnitRE = '|'.join(units)
inputs = [ '1 banana', '100 g of sugar', '1 cup of flour' ]
for input in inputs:
m = re.match(
r'(?P<amount>\d{1,3})\s*'
r'(?P<unit>(' + anyUnitRE + r')?)\s*'
r'(?P<preposition>(of)?)\s*'
r'(?P<name>.*)', input)
print m and m.groupdict()
输出会是这样的:
{'preposition': '', 'amount': '1', 'name': 'banana', 'unit': ''}
{'preposition': 'of', 'amount': '100', 'name': 'sugar', 'unit': 'g'}
{'preposition': 'of', 'amount': '1', 'name': 'flour', 'unit': 'cup'}
所以你可以这样做:
if m.groupdict()['name'] == 'sugar':
…
amount = int(m.groupdict()['amount'])
unit = m.groupdict()['unit']
关于python - 使用单词列表的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31788566/