Python正则表达式:捕获组不情愿的量词

时间:2017-10-02 20:21:04

标签: python regex regex-group

我正在尝试为组使用不情愿的量词,但它并没有按预期工作。但是,相同的正则表达式适用于https://regexr.com/等在线正则表达式工具。

re.findall(r"(ab)?c", "c")     # this returns [''], when I expect ['c']
re.findall(r"(ab)?c", "abc")   # this returns ['ab'], when I expect ['abc']

我期待正则表达式"(ab)?c"匹配' c'或者' abc'。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

来自re.findall的文档:

  

如果模式中存在一个或多个捕获组,则返回组列表;

因此,如果您的模式有一个组,它将返回该组。在您的第一个示例中,它不会返回任何内容,因为它找不到匹配的组,第二个示例将只返回该组。

您所寻求的内容可以通过re.search https://docs.python.org/3/library/re.html#re.regex.search完成:

>>> re.search(r"(ab)?c", "c")
<_sre.SRE_Match object; span=(0, 1), match='c'>

>>> re.search(r"(ab)?c", "abc")
<_sre.SRE_Match object; span=(0, 3), match='abc'>

您可以通过呼叫结果.groups()来检索群组

如果您不想在字符串中search,而是检查字符串是否与模式匹配(并且可能会看到这些组),请使用re.match(请参阅search vs match有关它们如何不同的详细信息。)