2012-05-25 30 views
1

我有一個Python正則表達式的問題。 regxe好友的結果似乎很好,但在python中失敗。Python不清晰的正則表達式行爲

組數據我必須匹配的是一個列表:

[' 101 0. 0.\n', 
' 0. 100.\n', 
' 1. 98.5107805\n', 
' 2. 97.0464459\n', 
' 3. 95.6065328\n', ... ] 

我得從第二行開始的所有號碼。 爲此我使用:

pattern = compile(r'\s*(?P<raw_time>\d*\.?\d*)\s+(?P<raw_value>\d*\.\d*)') 

而且一切正常。我遍歷列表並獲取「raw_time」中的第一個值和每個行中「raw_value」中的第二個值。 然後,我應該擴大這個詞,以加工數據。

所以數據轉身:

[' 101 0. 0.\n', 
' 0. 100. 1\n', 
' 1. 98.5107805 1\n', 
' 2. 97.0464459 1\n', 
' 3. 95.6065328 1\n', ... ] 

我還是隻需要分析出兩個第一參數。所以我改變了模式:

pattern = compile(r'\s*(?P<raw_time>\d*\.?\d*)\s+(?P<raw_value>\d*\.\d*).+') 

它的工作原理,除了1

做工精細的所有行:

In [35]: pattern.search('1. 98.5107805 1\n').groupdict() 
Out[35]: {'raw_time': '1.', 'raw_value': '98.5107805'} 

工作:

In [37]: pattern.search(' 0. 100. 1\n').groupdict() 
Out[37]: {'raw_time': '0.', 'raw_value': '100.'} 

工作:

在[44]:patte rn.search('1。 98.5107805 \ N ')。groupdict() 輸出[44]:{' raw_time ': '1', 'RAW_VALUE':'98 0.510780'}

不工作:

In [46]: pattern.search(' 0. 100.\n').groupdict() 
Out[46]: {'raw_time': '', 'raw_value': '0.'} 

我在很大程度上依賴在正則表達式(當然,演示,但它符合python到現在)。

建議?

TNX

+0

請你能清楚地顯示它不工作的輸入(就像你在工作示例中所做的那樣)。謝謝。 – NPE

+0

已更改。我的錯誤,對不起。 – TheMeaningfulEngineer

+0

Reggex好友不會幫助你使用Python正則表達式。你需要一個Python正則表達式測試器,如:http://ksamuel.pythonanywhere.com/ –

回答

2

您已添加需要.+將更改爲.*

+運營商要求至少有一個字符,而*將接受零個或多個。