这个Python正则表达式是如何工作的?

问题描述 投票:0回答:1

我不明白这个python正则表达式“re.match(”([abc])+”,“abc”)”的结果。 有人能一步一步解释这个正则表达式是如何工作的吗?

import re
m = re.match("([abc])+", "abc")
print(m.groupdict())
print(m.groups())
print(m.group(1))

{} ('C',)

我预计 m.group(1) 的结果将是“a”。

python regex expression posix python-re
1个回答
0
投票

正则表达式“([abc])+”尝试匹配并捕获字符串“abc”中连续出现的字符“a”、“b”或“c”。让我们逐步分解正则表达式的工作原理:

“([abc])+”:

([abc]):这是一个匹配单个字符“a”、“b”或“c”的捕获组。 +:此量词指定捕获组应匹配字符“a”、“b”或“c”的一次或多次出现。 “abc”:您要匹配的输入字符串。

以下是匹配过程的展开方式:

正则表达式引擎首先尝试将模式“([abc])+”与字符串“abc”进行匹配。

捕获组 ([abc]) 匹配第一个字符“a”。

量词 + 然后尝试匹配更多字符。它匹配下一个字符“b”。

量词 + 继续并匹配最后一个字符“c”。

正则表达式引擎已成功将整个字符串“abc”与模式“([abc])+”进行匹配。

结果抓取到的群组内容如下:

m.groupdict():此方法返回命名捕获组的字典。由于正则表达式中没有命名组,因此返回一个空字典:{}。 m.groups():此方法返回一个包含所有捕获组(包括嵌套组)的元组。在本例中,它返回 ('c',),因为最后一个匹配的字符 'c' 被捕获。 m.group(1):此方法返回第一个捕获组的内容。由于捕获组捕获了三个字符“a”、“b”和“c”,因此返回最后捕获的字符“c”。 m.group(1) 的结果是“c”,而不是“a”,因为捕获组捕获字符“a”、“b”或“c”的每次出现,而最后捕获的一个是“c”。

如果您想将整个匹配的子字符串“abc”捕获为一个组,您可以像这样修改正则表达式:“([abc]+)”。这将捕获连续字符“a”、“b”和“c”的整个序列。

© www.soinside.com 2019 - 2024. All rights reserved.