我有以下正则表达式:
PackageQuantity:\b|Servings?PerContainer:\b|Servings?PerPackage:\b(\d+)
应该匹配以下文字:
ServingsPerContainer:about11
为了舒适而逃脱空白空格
这个想法是,单词Package Quantity
,Servings per container
或servings per package
可以跟任何单词(恰好是一个单词),例如approx.
或{{ 1}}。
看起来很简单,但我无法找到解决方案,因为上面的正则表达式匹配空字符串而不是数字
pythonregex.com输出:
about
答案 0 :(得分:1)
您在:
(PackageQuantity:|(Servings)?PerContainer:|(Servings)?PerPackage:)[a-zA-Z.]*(\d+)或(PackageQuantity:|(Servings)?PerContainer:|(Servings)?PerPackage:)(about|approx.)?(\d+),如果你的单词列表不太长,那就应该诀窍
答案 1 :(得分:1)
您需要在模式中加入about
或approx
。
>>> 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)
在你的正则表达式中,你有效地匹配:
您会注意到,\d+
仅附加到这些条款中的最后一个。
此外,\d+
匹配1位或更多位数。它不会匹配“约”或“约”之类的东西。 \w+
可能更像您正在寻找的内容。它匹配字母,数字和下划线。类似的东西:
(PackageQuantity:\b|Servings?PerContainer:\b|Servings?PerPackage:\b)\w+