在Python中,我从一个字符串中提取电子邮件,如下所示:
split = re.split(" ", string)
emails = []
pattern = re.compile("^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-\.]+$");
for bit in split:
result = pattern.match(bit)
if(result != None):
emails.append(bit)
只要电子邮件之间有空格,这种方法就能奏效。但有时情况可能并非如此。例如:Hello, foo@foo.com
将返回:foo@foo.com
但是,请使用以下字符串:I know my best friend mailto:foo@foo.com!
这将返回null
。因此问题是:如何使正则表达式成为拆分的分隔符?foo@foo.com
在所有情况下,不管它旁边的标点符号。这在Python中可能吗?
我所说的“spliting by regex”是指如果程序在字符串中遇到模式,它将提取该部分并将其放入列表中。
3条答案
按热度按时间dw1jzc5e1#
我会说你在寻找
re.findall
:请注意,
findall
可以处理多个电子邮件地址:o2g1uqev2#
使用
re.search
或re.findall
。您还需要正确转义表达式(.
需要在字符类之外转义,而不是在字符类之内),并删除/替换锚点^
和$
(例如,使用\b
),例如:oaxa6hgo3#
我在你的正则表达式中看到的问题是你使用了匹配字符串开头的
^
和匹配字符串结尾的$
。