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

2024-04-25 08:21:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用不情愿的量词来形容一个群体,但并没有达到预期的效果。然而,同样的正则表达式在诸如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']

我期望正则表达式r“(ab)?“c”与“c”或“abc”匹配。你知道吗

我错过了什么?你知道吗


Tags: httpsreabthisreturns群体expectwhen
1条回答
网友
1楼 · 发布于 2024-04-25 08:21:40

re.findall的文档中:

If one or more capturing groups are present in the pattern, return a list of groups;

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

你所寻求的可以通过re.searchhttps://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了解它们之间的差异)。你知道吗

相关问题 更多 >