【问题标题】:Retrieve String Regex Pattern Match检索字符串正则表达式模式匹配
【发布时间】:2020-10-20 12:07:08
【问题描述】:

我有一个列表input

['ICE ERIE', 'ERIE', 'o9 ManGo', 'ManGo SLACKCURRAN 120mL', 'SLACKCURRAN']

如何从中提取以下字符串:

'ManGo SLACKCURRAN 120mL'

另一个例子:

Input:

['SWANSON', 'Apple Cider Vinegar Food Supplement Supplement mg per tablet DOUBLE STRENGTH FORMULA per tablet 1 NET', 'Cider', 'Vinegar', 'Food Supplement DOUBLE', 'Supplement', '200', 'per', 'tablet', 'DOUBLE', 'TABLETS 1 NET WEIGHT: 62g', '1', 'NET', 'WEIGHT:']

Output:

'TABLETS 1 NET WEIGHT: 62g' 

我的尝试:

import re
l = []
for each in input:   
    elif re.match('^\\d+\\.?\\d*(ounce|fl oz|foot|sq ft|pound|gram|inch|sq in|mL)$',each.lower()):
        l.append(each)
    else:
        pass 

【问题讨论】:

  • 您能否展示更多的输入和输出?
  • 输入:['SWANSON', 'Apple Cider Vinegar Food Supplement Supplement mg per tablet 双倍强度配方每片 1 NET', 'Cider', 'Vinegar', 'Food Supplement DOUBLE', 'Supplement ', '200', 'per', 'tablet', 'DOUBLE', 'TABLETS 1 NET WEIGHT: 62g', '1', 'NET', 'WEIGHT:'] 输出:'TABLETS 1 NET WEIGHT: 62g'
  • 考虑接受我的编辑

标签: python-3.x regex pattern-matching


【解决方案1】:

你可以使用

import re
input_l = ['ICE ERIE', 'ERIE', 'o9 ManGo', 'ManGo SLACKCURRAN 120mL', 'SLACKCURRAN']
reg = re.compile(r'\d*\.?\d+\s*(?:ounce|fl oz|foot|sq ft|pound|gram|inch|sq in|ml)\b', re.I)
print( list(filter(reg.search, input_l)) )
# => ['ManGo SLACKCURRAN 120mL']

请参阅Python demo

注意事项

  • 使用re.search 在字符串中的任意位置搜索匹配项(re.match 仅在字符串开头搜索),参见this thread
  • 删除^(字符串开头)和$(字符串结尾)锚点
  • 使用re.I 标志进行不区分大小写的匹配
  • \d*\.?\d+ 是一种更方便的模式来匹配整数或浮点数,因为它还支持 .95 类似数字
  • 以单词边界结束模式,以匹配作为整个单词的度量单位(注意字符串文字前的 r 前缀)。

【讨论】:

  • 有没有办法只返回“120mL”而不是“ManGo SLACKCURRAN 120mL”?
  • @ssr 您可以通过多种方式做到这一点,请参阅this demo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多