2017-07-24 37 views
0

的線我有一個文本文件中的行是如下得到某些字符:如何使用.findall從文本

0 {1.H1'} 5.82020 0.05000 0.10000 ++ {0.0} {} {2.H8} 7.61004 0.05000 0.10000 ++ {0.0} {} 0.0 100.0000 0 {} 0 0 0 

我用來挑選出價值的代碼5.820207.61004如下:

float_num = re.findall("[\s][1-9]{1}\.[0-9]+",line) 

相反,如果我想挑出來的話1.H1'2.H8,我應該在我的代碼改變?

此外,我的文本文件中有多行,我只是選擇了一個例子。

+0

你想選擇那些具體的值還是有任何具體的格式或規則? – Qeek

+0

如果格式始終爲number.Hnumber,您可以通過:「\ d \ .H \ d」 – Igle

回答

0

寫一個很好的正則表達式的很大一部分是能夠描述和看到實際模式。在這種情況下,你想:

{1.H1'} 

{2.H8} 

有沒有什麼好的像值= {}嗒嗒爲你搶,所以我想先用文字的東西我要去爲:

thelist = re.findall("{2.H8}",line) 

然後使之更爲通用,以獲得我真正想要的比賽(和逃避特殊字符),如:

thelist = re.findall("\{\d\.H\d\}",line) 

很酷。請注意,你並不需要逃避{或},但通常情況下,如果你最終得到一個數字,那麼它會有特殊的含義。但是我們缺少{1.H1「}所以我們需要一個可選的」這樣的:

thelist = re.findall("\{\d\.H\d'?\}",line) 

然後,如果你發現你缺少了一些調整,你認爲合適,使圖更寬。

+0

謝謝!因此,如果我想添加另一個特殊字符,例如,如果我的行包含{1.H3'$},那麼我會將其更改爲 re.findall(「\ {\ d \ .H \ d'?\ d $?\}」,行)? – user8290579

+0

$有特殊含義,所以需要轉義。 \ d表示一個數字。因此,對於{1.H3'$},您只需要這樣調整:\ {\ d \ .H \ d'?\ $?\} The?意味着前一個字符是可選的。所以這個正則表達式意味着可能有一個$ – sniperd

+0

有什麼「這個」正則表達式有什麼資源?這是我最喜歡的一個:https://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean給一看,你會有一堆全新的工具來寫這個東西:) – sniperd