Python正则表达式用字符串排除结尾

时间:2016-01-06 04:34:48

标签: python regex string

我有一个像

这样的行的文件
From david.horwitz@uct.ac.za Fri Jan  4 06:08:27 2008
Received: (from apache@localhost)
Return-Path: <postmaster@collab.sakaiproject.org>
for <source@collab.sakaiproject.org>;

我试图读取每一行并使用正则表达式来查找域名,基本上是符号@后面的部分。这是我写的代码

if re.search('[@]\S+?', line) : org = re.findall('@(\S+)',line)[0]

但它返回以下结果

uct.ac.za
localhost)
collab.sakaiproject.org>
collab.sakaiproject.org>;

是否有任何智能方法只保留域名,并且不包含&#39;)&#39;,&#39;&gt;&#39;或者&#39;&gt;;&#39;其次是域名?

2 个答案:

答案 0 :(得分:3)

轻微修正 - FQDN也可以包括数字......

所以正则表达式需要稍微调整

[@] [A-ZA-Z0-9 .-] +

https://en.wikipedia.org/wiki/Uniform_Resource_Locator

的完整域规则

答案 1 :(得分:2)

试试这个

使用正则表达式否定来执行此操作,[^\>\)\s]+

if re.search('@([^\>\)\s]+)', line) : org = re.findall('@([^\>\)\s]+)',line)[0]

输出

uct.ac.za
localhost
collab.sakaiproject.org
collab.sakaiproject.org