使用正则表达式从邮件头中提取IP地址
我有个问题,我需要从电子邮件头部的以下部分提取IP地址。
Received: from smtprelay.b.mail.com (smtprelay0225.b.mail.com. [11.11.11.11])
by mx.google.com with ESMTP id g7si12282480pat.225.2014.07.26.06.53.24
for <a@gmail.com>;
我只想要输出11.11.11.11,想用Python中的正则表达式来实现。
如果有人能帮忙,我会非常感激。
谢谢。
5 个回答
在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有人可能会在使用某个库或者框架时,发现它的功能和用法跟自己想的不太一样。这种情况很常见,特别是对于刚入门的朋友来说。
在这种情况下,最好的办法就是去查阅相关的文档,或者在网上搜索一下,看看有没有其他人遇到过类似的问题。很多时候,社区里的其他开发者会分享他们的经验和解决方案,这对我们理解和解决问题非常有帮助。
另外,写代码的时候,保持代码的整洁和可读性也很重要。这样不仅能帮助自己更好地理解代码,也能让其他人更容易地阅读和维护你的代码。
总之,遇到问题不要慌,慢慢查找资料,理解每个部分的功能,逐步解决问题,这样才能不断提高自己的编程水平。
>>> f=open("file")
>>> for line in f:
... if "Received" in line:
... print line.split("]")[0].split("[")[-1]
...
11.11.11.11
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用这些数据。这个过程可能会涉及到很多步骤,比如连接到数据库、查询数据、处理数据等等。
如果你在使用某种编程语言,比如Python,可能会用到一些库来帮助你完成这些任务。库就像是工具箱,里面有很多现成的工具,可以让你更轻松地完成工作。
在处理数据时,可能会遇到一些错误,比如数据格式不对、连接失败等等。这些错误需要我们去调试,也就是找出问题所在并解决它。调试就像是侦探,帮助我们找到程序中的“罪犯”。
总之,处理数据是编程中很重要的一部分,掌握这些技能可以让你更有效地完成任务。
>>> import re
>>> a="""from smtprelay.b.mail.com (smtprelay0225.b.mail.com. [11.11.11.11])
... by mx.google.com with ESMTP id g7si12282480pat.225.2014.07.26.06.53.24
... for <a@gmail.com>;"""
>>> re.findall(r'\[(.*)\]',a)
['11.11.11.11']
看起来你想要获取那些在[]
方括号里面的数据。
>>> import re
>>> s = """Received: from smtprelay.b.mail.com (smtprelay0225.b.mail.com. [11.11.11.11])
... by mx.google.com with ESMTP id g7si12282480pat.225.2014.07.26.06.53.24
... for <a@gmail.com>;"""
>>> re.search(r'(?<=\[)[^\[\]]*(?=\])', s).group()
'11.11.11.11'
或者
>>> re.findall(r'(?<![.\d])\b\d{1,3}(?:\.\d{1,3}){3}\b(?![.\d])', s)
['11.11.11.11']
使用这个正则表达式
(?<=\[)\d{1,3}(?:\.\d{1,3}){3}(?=\])
来提取IP地址
你可以看看这个正则表达式是怎么工作的:http://regex101.com/r/lI0rU3/1
x="""Received: from smtprelay.b.mail.com (smtprelay0225.b.mail.com. [11.11.11.11])
... by mx.google.com with ESMTP id g7si12282480pat.225.2014.07.26.06.53.24
... for <a@gmail.com>;"""
>>> re.findall(r'(?<=\[)\d{1,3}(?:\.\d{1,3}){3}(?=\])', x)
['11.11.11.11']
(?<=\[)\d+(?:\.\d+){3}(?=\])
试试这个。使用 re.findall
。
import re
p = re.compile(ur'(?<=\[)\d+(?:\.\d+){3}(?=\])')
test_str = u"Received: from smtprelay.b.mail.com (smtprelay0225.b.mail.com. [11.11.11.11])\n by mx.google.com with ESMTP id g7si12282480pat.225.2014.07.26.06.53.24\n for <a@gmail.com>;"
re.findall(p, test_str)
看看这个演示。