蟒蛇:正则表达式只得到了最后一次出现

问题描述:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import re 

text = "aaaa[ab][cd][ef]" 

a = re.compile("^(\w+)(\[\w+\])*$").findall(text) 

print a 

我需要所有的人,但它返回:蟒蛇:正则表达式只得到了最后一次出现

[('aaaa', '[ef]')] 

有:

a = re.compile("\[\w+\]").findall(text) 

我得到的所有的人,但第一个字是出...

['[ab]', '[cd]', '[ef]'] 

此文本是随机文本我把这个,因为o F中的计算器执行标准质量

最后我用这个代码做到这一点:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import re 

text = "aaaa[ab][cd][ef]" 

var = [] 
if re.match("^(\w+)(\[\w+\])*$", text): 
     a = re.findall("^\w+", text)[0] 
     var.append(a) 
     b = re.findall("\[\w+\]", text) 
     for i in b: 
       var.append(i) 
print var 

输出:

['aaaa', '[ab]', '[cd]', '[ef]'] 

个所有这些解决方案都很好,谢谢:)

这里是你如何能做到这:

In [14]: a = re.compile(r"(\w+|\[\w+\])").findall(text) 

In [15]: print a 
['aaaa', '[ab]', '[cd]', '[ef]'] 

每场比赛返回一组字母(带或不带支架)。

+0

嗯,但它不工作的第一个字... grgrgrgrgrgr – ZiTAL 2012-02-01 22:17:46

只有一个匹配项:"^(\w+)"部分匹配"aaaa""(\[\w+\])*$"部分匹配"[ab][cd][ef]"。请注意,你得到一个元素的列表(这是一个元组),所以只有一个匹配。在正则表达式中使用的每一对圆括号都会在元组中生成一个元素,其中包含与它们内部相匹配的文本。有两对,所以元组中有两个元素。第二对括号是加星标的,但这只会导致该结果被多次“分配”(似乎保留最后一个值):它不会自乘括号,因此您不会获得更大的元组。

我不知道你期望什么,所以我不知道什么正则表达式建议。

+0

我会做2个步骤是没有问题的:)感谢信息 – ZiTAL 2012-02-01 22:24:54

基于AIX上的回答您的评论看来,你想要求非括号部分匹配,也许这样的事情是你在找什么呢?

>>> a = re.compile(r"^(\w+)((?:\[\w+\])*)").findall(text) 
>>> print a 
[('aaaa', '[ab][cd][ef]')] 

如果你需要得到结果的['aaaa', '[ab]', '[cd]', '[ef]']而不是什么上面这里显示的是一个方法:

>>> match = re.compile(r"^(\w+)((?:\[\w+\])*)").search(text) 
>>> a = [match.group(1)] + match.group(2).replace("][", "] [").split() 
>>> print a 
['aaaa', '[ab]', '[cd]', '[ef]']