2013-03-12 215 views
0

這是我現在有:正則表達式Python字符串忽略特殊字符

import re 

x = "From: Joyce IP: 192.111.1.1 Source: 192.168.1.1"  
x = x.replace(' ', '') 
m = re.findall('(?<=:)\S+', x) 
print m 

而且我希望有一個這樣的輸出,使這個$ script.py>的Result.txt

Joyce 192.111.1.1 192.168.1.1 

回答

2

而是找到你想要的結果的文本匹配的,它可能是更容易更換的東西,你不想:

>>> import re 
>>> x = "From: Joyce IP: 192.111.1.1 Source: 192.168.1.1" 
>>> re.sub(r'\w+:\s', '', x) 
'Joyce 192.111.1.1 192.168.1.1' 

但是,如果你喜歡使用re.findall()這裏是一個選項,類似於當前的做法:

>>> ' '.join(re.findall(r'(?<=:\s)\S+', x)) 
'Joyce 192.111.1.1 192.168.1.1' 

您需要在負回顧後的\s因爲在你輸入每個冒號後的空間串。

+0

這正是我說的這是很容易給別人該死,不好意思問FJ你爲什麼用sub而不是search findall? – PythonNewbie 2013-03-12 16:16:13

+0

@PythonNewbie我添加了一個使用findall的版本,但是我通常會發現更容易理解不使用lookbehead或lookahead的表達式,並且使用sub可以實現這一點。 – 2013-03-12 16:18:04

+0

嗯,我明白你非常感謝:) – PythonNewbie 2013-03-12 16:33:34

0

稍有變化到您的代碼(不要刪除空格,並將它們包括在後面的樣子)完美的作品:

import re 

x = "From: Joyce IP: 192.111.1.1 Source: 192.168.1.1"  
m = re.findall('(?<=:\s)\S+', x) 
print " ".join(m)