2014-03-30 187 views
4

我有一個包含數千行的文本文件。這裏有一個例子(=字符串)的正則表達式

line = .Falies/367. 11DG1550/11DG15537.Axiom=nt60 
line = .Failies/367. 11DG1550/11DG15537.Axiom=nt50 

我試圖提取末「NT60」,「NT50」的字符串。

lines = line.split('=') 
version = lines[-1] 

的問題是該行字符的結束將包括('\n'

我想用正則表達式搜索到匹配字符串從('=nt') 開始的,但我不知道應我用來匹配=, word, number

任何人都可以幫忙嗎?

回答

1

的正則表達式匹配=nt那麼number是:

=(nt\d+) 

而且在你的榜樣:

line = .Falies/367. 11DG1550/11DG15537.Axiom=nt60 
line = .Failies/367. 11DG1550/11DG15537.Axiom=nt50 

它將返回兩場比賽:

MATCH 1 
1. [49-53] `nt60` 
MATCH 2 
1. [105-109] `nt50` 

說明:

`=` matches the character `=` literally 
1st Capturing group `(nt\d+)` 
    `nt` matches the characters `nt` literally (case sensitive) 
    `\d` match a digit `[0-9]` 
    `+` Quantifier: Between one and unlimited times, as many times as possible, 
     giving back as needed 
如果你希望你的正則表達式匹配

= wordnumber然後只是\w+更換nt匹配任何字。

希望這有助於。

+0

謝謝@unixer。我發現它有點複雜,但無論如何它都有幫助。 – user91

+1

沒問題@MarJamil,選擇適合你的需求:) – najjarammar

+2

@MarJamil最好的方式來說謝謝@ SO是[投票] –

2

你的第一種方法是絕對好的。您可以使用您使用第一種方法提取的字符串,然後將strip()應用於該字符串:

strip()從字符串中刪除所有前導和尾隨的空格和換行符。

>>> your_str = 'nt60\n' 
>>> your_str.strip() 
'nt60' 

對於您的情況:

lines = line.rsplit('=',1) 
version = lines[-1].strip() 
+2

不使用'string'(是一個模塊)和'str'(是一個類型)作爲變量名。 –

+0

@Grijesh,再次嗨。謝謝。現在改變了。 – sshashank124

+0

謝謝@ sshashank124真的有幫助 – user91