2012-02-02 82 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