2012-02-15 118 views
3

我使用Python和正則表達式來嘗試和搜索文本。給定一個文本文件中的字符串:正則表達式返回<_s而不是十進制值

line = (<layerThickness> 0.58 </layerThickness>) 

我試圖分配0.58〜變量L,但輸出是一致的,「< _s」,而不是十進制值。這是我一直在嘗試:

L = re.search(r"([-+]?[0-9]*\.?[0-9]+)", line) 

任何幫助表示讚賞!

+0

你確定嗎?當我在這裏運行這個代碼時,'L.group(1)'是'0.58'。你能發佈翻譯的實際結果嗎? – bgporter 2012-02-15 19:14:18

回答

1

也許你只需要調用.group()方法:

import re 
line = '(<layerThickness> 0.58 </layerThickness>)' 
L = re.search(r"([-+]?[0-9]*\.?[0-9]+)", line).group(0) 
print(L) 

產量

0.58 
+0

這個工程!其實,我試過羣法較早,但它沒有工作,因爲我是從1索引(我通常程序在Matlab中,從1索引,所以我是想組(1))和它保持引發錯誤,所以我嘗試訪問它沒有組。 Noob錯誤。謝謝一堆! – user1212148 2012-02-15 20:12:00

1

爲什麼,這是正確的!這是我所看到的:

>>> import re 
>>> line = '(<layerThickness> 0.58 </layerThickness>)' 
>>> L = re.search(r"([-+]?[0-9]*\.?[0-9]+)", line) 
>>> L.group() 
'0.58' 
1

你的正則表達式是好的,你只是沒有意識到re.search,如果找到匹配,返回re.Match對象。這是因爲re.Match對象不一定只有一個組。您需要使用re.Match.group或re.Match.groups方法返回組正則表達式發現的實際值。

>>> line = '(<layerThickness> 0.58 </layerThickness>)' 
>>> L = re.search(r"([-+]?[0-9]*\.?[0-9]+)", line) 
>>> print L 
_sre.SRE_Match object at 0x100499dc8> 
>>> print L.group() 
0.58 

注意,順便說一句,該集團仍然是一個字符串,而不是一個整數/浮點,你仍然需要將其轉換爲整數/浮點數學使用它。

還要注意使L可能沒有,如果你的行不包括匹配好,所以你需要在生產代碼來測試這一點。

相關問題