Python正则表达式:如何匹配单个正则表达式中的多个子串?

时间:2012-02-02 01:30:35

标签: regex python-3.x

我正在尝试使用Python 3.2解析生成的ARFF文件。目前,我正在尝试编写一个正则表达式,它将读取结构类似

的行
@attribute sepallength {'\'(-inf-5.55]\'','\'(5.55-6.15]\'','\'(6.15-inf)\''}

并返回一个MatchObject,其groups()函数返回

("sepallength", "'\\'(-inf-5.55]\\''", "'\\'(5.55-6.15]\\''", "'\\'(6.15-inf)\\''")

换句话说,我正在尝试编写一个正则表达式,它将匹配一个或多个遵循某种格式的子字符串。

我当前的尝试看起来像这样(行是一个字符串):

matches = re.match(r"@attribute (\w+) {(?:([^,]+),?)+}", line)

但是它的group()函数只返回与花括号内的模式匹配的最后一个子串:

('sepallength', "'\\'(6.15-inf)\\''")

为什么第二个加号不使表达式与满足我编写的非逗号规则的每个实例相匹配?如何轻松获得我想要的值?

2 个答案:

答案 0 :(得分:0)

我认为你正在寻找findall http://docs.python.org/library/re.html#re.findall

答案 1 :(得分:0)

您问题的答案

  

为什么第二个加号不会使表达式匹配   满足我写的非逗号规则的实例?

至少记录在Match Objects部分中:

  

如果一个组匹配多次,则只能访问最后一个匹配