2014-03-30 148 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