我正在尝试使用正则表达式来提取“@”符号和“。”之间的电子邮件地址的一部分。字符。这就是我目前正在做的事情,但无法获得正确的结果。
company = re.findall('^From:.+@(.*).',line)
给我:
['@iupui.edu']
我想摆脱.edu
答案 0 :(得分:3)
答案 1 :(得分:3)
要匹配正则表达式中的文字Dispose
,您需要使用.
,因此您的代码应如下所示:
\.
请注意,这将始终与字符串中company = re.findall('^From:.+@(.*)\.',line)
# ^ this position was wrong
的最后一次出现匹配,因为.
是贪婪的。如果您想匹配 first 出现,则需要从捕获组中排除任何(.*)
:
.
查看demo。
答案 2 :(得分:2)
一个简单的例子是:
>>> import re
>>> re.findall(".*(?<=\@)(.*?)(?=\.)", "From: atc@moo.com")
['moo']
>>> re.findall(".*(?<=\@)(.*?)(?=\.)", "From: atc@moo-hihihi.com")
['moo-hihihi']
无论行的开头如何,都匹配主机名,即 greedy 。
答案 3 :(得分:1)
你可以拆分并找到:
s = " abc.def@ghi.mn I"
s = s.split("@", 1)[-1]
print(s[:s.find(".")])
或者只是分裂,如果它不总是与你的字符串匹配:
s = s.split("@", 1)[-1].split(".", 1)[0]
如果是,那么发现将是最快的:
i = s.find("@")
s = s[i+1:s.find(".", i)]