python如何处理r';([abc])&x2B';
在python的文档中,我看到了一个示例: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])+匹配整个字符串(
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一样困惑。