[英]Matching alphanumeric words, mentions or emails with Python regex
我已经读过这个,这个,这个以及很多其他的。 他们不回答我的问题。
我想过滤一个字符串,它可能包含以“@”开头的电子邮件或字符串(如电子邮件,但在“@”之前没有文本)。 我已经测试了很多,但开始接近的最简单的方法之一是:
import re
re.split(r'(@)', "test @aa test2 @bb @cc t-es @dd-@ee, test@again")
Out[40]:
['test ', '@', 'aa test2 ', '@', 'bb ', '@', 'cc t-es ', '@', 'dd-', '@', 'ee, test', '@', 'again']
我正在寻找可以给我的正确正则表达式:
['test ', '@aa', 'test2 ', '@bb ', '@cc', 't-es ', '@dd-', '@ee', 'test@again']
当您可以“哟正则表达式,给我所有匹配项”时,为什么要尝试拆分:
test = "test @aa test2 @bb @cc t-es @dd-@ee, test@again"
import re
print(
re.findall("[^\s@]*?@?[^@]* |[^@]*@[^\s@]*", test)
)
# ['test ', '@aa test2 ', '@bb ', '@cc t-es ', '@dd-', '@ee, ', 'test@again']
我试过了,但我不能让正则表达式更小,但至少它有效,而且谁希望正则表达式很小
根据 OP 的新要求(或更正的要求)
[^\s@]*?@?[^\s@]* |[^@]*@[^\s@]*
我自己的基于不同电子邮件解析+简单“ @[:alphanum:]+
”解析的解决方案是:
USERNAME_OR_EMAIL_REGEX = re.compile(
r"@[a-zA-Z0-9-]+" # simple username
r"|"
r"[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+" # email
r"@" # following: domain name:
r"[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?"
r"(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.