Python 正则表达式:带有捕获组的勉强量词
Python regex: reluctant quantifier with capturing 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']
我希望正则表达式 r"(ab)?c" 匹配 'c' 或 'abc'。
我在这里错过了什么?
来自 re.findall
的文档:
If one or more capturing groups are present in the pattern, return a list of groups;
因此,如果您的模式有一个组,它将 return 该组。在你的第一个例子中,它不会 return 任何东西,因为它找不到匹配的组,第二个例子只会 return 组。
所求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 (see search vs match 了解它们之间的区别) .
我正在尝试对一组使用不情愿的量词,但它没有按预期工作。但是,相同的正则表达式可以完美地与 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'。
我在这里错过了什么?
来自 re.findall
的文档:
If one or more capturing groups are present in the pattern, return a list of groups;
因此,如果您的模式有一个组,它将 return 该组。在你的第一个例子中,它不会 return 任何东西,因为它找不到匹配的组,第二个例子只会 return 组。
所求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 (see search vs match 了解它们之间的区别) .