我正在尝试为组使用不情愿的量词,但它并没有按预期工作。但是,相同的正则表达式适用于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'。
我在这里缺少什么?
答案 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有关它们如何不同的详细信息。)