蟒蛇:正则表达式只得到了最后一次出现
#!/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]']
每场比赛返回一组字母(带或不带支架)。
只有一个匹配项:"^(\w+)"
部分匹配"aaaa"
和"(\[\w+\])*$"
部分匹配"[ab][cd][ef]"
。请注意,你得到一个元素的列表(这是一个元组),所以只有一个匹配。在正则表达式中使用的每一对圆括号都会在元组中生成一个元素,其中包含与它们内部相匹配的文本。有两对,所以元组中有两个元素。第二对括号是加星标的,但这只会导致该结果被多次“分配”(似乎保留最后一个值):它不会自乘括号,因此您不会获得更大的元组。
我不知道你期望什么,所以我不知道什么正则表达式建议。
我会做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]']
嗯,但它不工作的第一个字... grgrgrgrgrgr – ZiTAL 2012-02-01 22:17:46