2012-02-09 46 views
1

如何編寫正則表達式來獲取python中的浮點數。我想得到55.97。從<td nowrap="nowrap">55.97</td>。所以我給了如何寫一個正則表達式來獲取Python中的浮點數?

newsecond_row_data = (re.search('(?<=>)\d+|\d+.\d+',second_row_data[a])) 
newsecond_row_data.group(0) 

print newsecond_row_data.group(0) 

但它給了55而不是55.97。 PLZ HLP我

謝謝

+2

請注意,您不應該用正則表達式和字符串函數解析HTMl。請參閱http://stackoverflow.com/a/1732454/113586 – wRAR 2012-02-09 08:49:33

+0

所有這些對您來說都合法:'1.','.1','1','-1.1','1e-1'? – 2012-02-09 08:52:19

+0

感謝您的所有答案,我解決了它:) – Randi 2012-02-09 09:14:40

回答

0
newsecond_row_data = (re.search('(?<=>)\d+.\d+|\d+',second_row_data[a])) 
newsecond_row_data.group(0) 

你的模式是不工作的原因是因爲它看到「55」,找到了匹配,並停止進一步搜索。

然後,我會建議不要使用正則表達式,並使用XML處理庫從HTML標記中提取文本(請參閱Sudhir的答案)。

+0

請你大膽地提出你的建議*「我想用正則表達式解析xml 「*來? – 2012-02-09 10:25:56

0
newsecond_row_data = re.search('\d+\.?\d*', second_row_data[a]) 
print newsecond_row_data.group(0) 
0
import re 

ptn = r'[-+]?([0-9]*\.?[0-9]+)' 
pat_obj = re.compile(ptn) 

m = pat_obj.search(some_str) 
if m: 
    print(m.group(0)) 

,如果你有每串一個以上的浮點,然後使用的findall代替比賽

>>> s = '3dfrtg45.2trghyui8erdftgy77.431dser' 

>>> pat_obj = re.compile(ptn) 
>>> v = pat_obj.findall(s) 
>>> v 
    ['3', '45.2', '8', '77.431'] 
7

如果您想要從HTML或XML中提取數據,請查看可用的各種解析器。對於這種特殊的情況下,你可以很方便地提取數:

>>> from xml.etree import ElementTree 
>>> element = ElementTree.fromstring('<td nowrap="nowrap">55.97</td>') 
>>> element.text 
'55.97' 
>>> 
+2

+1不使用正則表達式,它不適用 – 2012-02-09 08:56:55