[英]Python split by regular expression
在 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 中可能吗?
“按正则表达式拆分”是指如果程序遇到字符串中的模式,它将提取该部分并将其放入列表中。
我会说你正在寻找re.findall
:
>>> email_reg = re.compile(r'[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+')
>>> email_reg.findall('I know my best friend mailto:foo@foo.com!')
['foo@foo.com']
注意findall
可以处理多个 email 地址:
>>> email_reg.findall('Text text foo@foo.com, text text, baz@baz.com!')
['foo@foo.com', 'baz@baz.com']
使用re.search
或re.findall
。 您还需要正确转义您的表达式( .
需要在字符类之外而不是在内部转义)并删除/替换锚点^
和$
(例如使用\b
),例如:
r"\b[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+\b"
我在您的正则表达式中看到的问题是您使用^
匹配字符串的开头, $
匹配字符串的结尾。 如果您删除它然后使用您的示例测试用例运行它,它将起作用
>>> re.findall("[A-Za-z0-9\._-]+@[A-Za-z0-9-]+.[A-Za-z0-9-\.]+","I know my best friend mailto:foo@foo.com!")
['foo@foo.com']
>>> re.findall("[A-Za-z0-9\._-]+@[A-Za-z0-9-]+.[A-Za-z0-9-\.]+","Hello, foo@foo.com")
['foo@foo.com']
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.