繁体   English   中英

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

[英]python regex, optionally match a word

我有以下正则表达式:

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

应该与以下文本匹配的内容:

ServingsPerContainer:about11

空格留有空白,以提高舒适度

这个想法是,“ Package Quantity ,“ Servings per container servings per package或“ servings per package一词后面可以紧跟任何一个词(恰好是一个词),例如approx. about

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

pythonregex.com输出:

>>> regex = re.compile("PackageQuantity:\b|Servings?PerContainer:\b|Servings?PerPackage:\b(\d+)",re.IGNORECASE)
>>> r = regex.search(string)
>>> r
<_sre.SRE_Match object at 0x672858ed0eef4da0>
>>> regex.match(string)
<_sre.SRE_Match object at 0x672858ed0ee8c6a8>

# List the groups found
>>> r.groups()
(None,)

# List the named dictionary objects found
>>> r.groupdict()
{}

# Run findall
>>> regex.findall(string)
[u'']

# Run timeit test
>>> setup = ur"import re; regex =re.compile("PackageQuantity:\b|Servings?PerContainer:\b|S ...
>>> t = timeit.Timer('regex.search(string)',setup)
>>> t.timeit(10000)
0.0259890556335

您需要在模式中包含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'

要么

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

在您的正则表达式中,您实际上是在匹配:

  • 包装数量:\\ b
  • 份量:PerContainer:\\ b
  • 份量/包装:\\ b(\\ d +)

您会注意到, \\d+仅附加在这些子句的最后。

此外, \\d+匹配1个或多个数字。 它与“ about”或“ approx”之类的内容不匹配。 \\w+可能更像您想要的东西。 它匹配字母,数字和下划线。 就像是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM