2013-03-12 176 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)