2012-02-02 42 views
0

我想解析使用Python 3.2生成的ARFF文件。目前,我想写一个正则表达式将读取结构类似于Python正则表达式:如何在单个正则表达式内匹配多个子字符串?

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

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

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

换句话说,我想写一个正则表达式,它将匹配一个或多个遵循特定格式的子字符串。

我现在的尝试是这样的(行是一个字符串):

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

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

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

为什么第二个加号不能使表达式匹配满足我写的非逗号规则的每个实例?我怎样才能轻松获得我想要的价值?

回答

0

的回答你的问题

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

在部分Match Objects至少记载:

如果一组多次匹配,只有最后一场比赛是访问

+0

“无法完成”是正确答案v_v – sadakatsu 2014-04-24 05:26:31

0

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

+0

我看不到的方式来使的findAll()工作。如果我只是在寻找像字母数字序列这样的东西,那就太棒了,但我特别寻找逗号分隔的非逗号字符串,它们必然被花括号包围。另外,我想同时获取属性的名称(例如'sepallength')。 findall()可以应用于这个问题吗? – sadakatsu 2012-02-02 01:52:17

+0

嗡嗡声听起来很复杂。我认为你可以更好地服务于用多倍步骤的函数来分解问题。 1)阅读线 2)获得了“sepalllength” 3)获取{}和分裂(“”) – 2012-02-02 02:03:38

+0

我目前正在与一个类似的解决方案工作之间一切都只是相处移动。然而,正则表达式的概念不允许多个子串匹配的概念吗?而且,如果是这样,正则表达式的Python表示是否支持它? – sadakatsu 2012-02-02 02:09:12