python如何处理r';([abc])&x2B';

python如何处理r';([abc])&x2B';,python,regex,Python,Regex,在python的文档中,我看到了一个示例: m = re.match("([abc])+", "abc") m.groups() # ('c',) 这是怎么发生的?我想分组应该是“a” >>> m = re.match("([abc])+", "abc") >>> m.group(0) 'abc' >>> m.group(1) 'c' >>> m.groups() ('c',) 正则表达式([abc])+匹配整个字符串(

在python的文档中,我看到了一个示例:

m = re.match("([abc])+", "abc")
m.groups() # ('c',)
这是怎么发生的?我想分组应该是“a”

>>> m = re.match("([abc])+", "abc")
>>> m.group(0)
'abc'
>>> m.group(1)
'c'
>>> m.groups()
('c',)
正则表达式
([abc])+
匹配整个字符串(请参见
m.group(0)

通过捕获单个字符
[abc]
,将结果捕获到组号1中,然后重复该过程,可以获得此匹配。因此,该组将首先是
a
,然后(在下一次重复中)
b
,最后是
c

.groups()
返回所有捕获组匹配的元组。因为只有一个捕获组,所以得到一个元素元组

正则表达式
([abc])+
匹配整个字符串(请参见
m.group(0)

通过捕获单个字符
[abc]
,将结果捕获到组号1中,然后重复该过程,可以获得此匹配。因此,该组将首先是
a
,然后(在下一次重复中)
b
,最后是
c


.groups()
返回所有捕获组匹配的元组。因为只有一个捕获组,所以您会得到一个单元素元组。

我认为行为是未指定的。在重复操作符中使用捕获组时,它通常捕获最后一个匹配。然而,中的讨论表明,情况并非总是如此:

是的,但这对于组索引的完全一致性是必要的。 当前返回值明显不一致(通常返回 最后一次出现的捕获组,但我发现 情况并非总是如此,因为在 回溯…)

但是,修改示例以返回每个字符很容易:

In [7]: m = re.match("([abc]+)", "abc") # a slightly different regex

In [8]: list(m.groups()[0])
Out[8]: ['a', 'b', 'c']

在这里,整个序列被捕获为一个单独的组,然后被分割。

我认为行为是未指定的。在重复操作符中使用捕获组时,它通常捕获最后一个匹配。然而,中的讨论表明,情况并非总是如此:

是的,但这对于组索引的完全一致性是必要的。 当前返回值明显不一致(通常返回 最后一次出现的捕获组,但我发现 情况并非总是如此,因为在 回溯…)

但是,修改示例以返回每个字符很容易:

In [7]: m = re.match("([abc]+)", "abc") # a slightly different regex

In [8]: list(m.groups()[0])
Out[8]: ['a', 'b', 'c']

在这里,整个序列被捕获为单个组,然后被拆分。

当一个捕获组被重复时,它将返回最后一个实例。当一个捕获组被重复时,它将返回最后一个实例。我在Python 2.7.3和3.2.3中都得到了
['c']
。啊,你在用IronPython?是否IPython在内部使用.NET正则表达式引擎?这将是a)出乎意料的,b)令人敬畏的,因为.NET是为数不多的允许访问重复组的单个捕获的引擎之一。@TimPietzcker:我的代码还是OP的代码,你得到的是
['c']
?我的代码在CPython 2.7.3上生成
['a','b','c']
(未使用Python 3进行测试,但我希望它也能这样做)。@NPE:您显示的正则表达式很奇怪。您正在捕获
[abc]+
(一个序列而不是像问题中那样的单个字符),但是您仍然获得每个单独的字符吗?EDIT:Nevermind,
list()
将按字符分割字符串。@NPE:由于Tim Pietzcker提出的讨论,我有点困惑,但结果证明这是正常的。哎呀,我忽略了您更改了正则表达式。实际上,您做了一个
列表(“abc”)
,所以我和nhahtdh一样困惑。我在Python 2.7.3和3.2.3中都得到了
['c']
。啊,你在用IronPython?是否IPython在内部使用.NET正则表达式引擎?这将是a)出乎意料的,b)令人敬畏的,因为.NET是为数不多的允许访问重复组的单个捕获的引擎之一。@TimPietzcker:我的代码还是OP的代码,你得到的是
['c']
?我的代码在CPython 2.7.3上生成
['a','b','c']
(未使用Python 3进行测试,但我希望它也能这样做)。@NPE:您显示的正则表达式很奇怪。您正在捕获
[abc]+
(一个序列而不是像问题中那样的单个字符),但是您仍然获得每个单独的字符吗?EDIT:Nevermind,
list()
将按字符分割字符串。@NPE:由于Tim Pietzcker提出的讨论,我有点困惑,但结果证明这是正常的。哎呀,我忽略了您更改了正则表达式。实际上,你做了一个
列表(“abc”)
,所以我和NHAHDH一样困惑。