python - 使用单词列表的正则表达式

标签 python regex

我正在使用 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 变量。

最佳答案

我认为您的 amountsunits,所以我冒昧地修正了这个用词不当的问题。我建议使用命名分组来简化对输出的理解。

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/

相关文章:

Python排序两个键两个顺序

python - 一起洗牌几个数据帧

python - 如何在 Azure VM (v1) 上设置全局可见的环境变量

BigQuery 中特定的正则表达式查询字符串解析

regex - bash regex for word with some suffixes 但不是一个特定的

python - 谷歌机器学习引擎云存储作为文件

Python 3,urllib ...重置连接可能吗?

javascript - 正则表达式检测<>内的文本

regex - 正则表达式限制字符串大小

正则表达式 : Alternative to backreference in negative lookbehind