python正则表达式,可选地匹配一个单词

时间:2014-08-14 15:10:52

标签: python regex

我有以下正则表达式:

PackageQuantity:\b|Servings?PerContainer:\b|Servings?PerPackage:\b(\d+)

应该匹配以下文字:

ServingsPerContainer:about11

为了舒适而逃脱空白空格

这个想法是,单词Package QuantityServings per containerservings per package可以跟任何单词(恰好是一个单词),例如approx.或{{ 1}}。

看起来很简单,但我无法找到解决方案,因为上面的正则表达式匹配空字符串而不是数字

pythonregex.com输出:

about

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您需要在模式中加入aboutapprox

>>> import re
>>> s = "ServingsPerContainer:about11"
>>> m = re.search(r'(?:PackageQuantity:\b|Servings?PerContainer:\b|Servings?PerPackage:\b)(?:about|approx)(\d+)', s, re.I)
>>> m
<_sre.SRE_Match object at 0x7f0531c7a648>
>>> m.group()
'ServingsPerContainer:about11'
>>> m.group(1)
'11'

OR

>>> m = re.search(r'(?:PackageQuantity:\b|Servings?PerContainer:\b|Servings?PerPackage:\b)\D*(\d+)', s, re.I)
>>> m.group()
'ServingsPerContainer:about11'

答案 2 :(得分:1)

在你的正则表达式中,你有效地匹配:

  • PackageQuantity:\ b
  • 服务?PerContainer:\ b
  • 份量PerPackage:\ B(\ d +)

您会注意到,\d+仅附加到这些条款中的最后一个。

此外,\d+匹配1位或更多位数。它不会匹配“约”或“约”之类的东西。 \w+可能更像您正在寻找的内容。它匹配字母,数字和下划线。类似的东西:

(PackageQuantity:\b|Servings?PerContainer:\b|Servings?PerPackage:\b)\w+