Python中用正则拆分邮箱地址:从james@rmit.edu.au提取指定分段
嘿,这个问题我太懂啦!你想要把邮箱james@rmit.edu.au拆分成用户名james、域名主体rmit和顶级域名au,对吧?原来的方法因为edu.au属于多级顶级域名,直接用split('.',1)只能拿到edu.au,没法单独提取出au,咱们可以用这几种方法解决:
方法一:纯字符串拆分组合
不用正则,靠字符串的rsplit(从右往左拆分)和split(从左往右拆分)搭配就能实现:
email = 'james@rmit.edu.au' # 第一步:拆分出用户名和完整域名部分 first_part, domain_full = email.rsplit('@', 1) # 第二步:拆分出域名主体(rmit)和剩下的后缀部分(edu.au) domain_name, rest_suffix = domain_full.split('.', 1) # 第三步:从后缀部分的最右侧拆分出顶级域名(au) tld = rest_suffix.rsplit('.', 1)[-1] print(first_part) # 输出: james print(domain_name) # 输出: rmit print(tld) # 输出: au
方法二:正则表达式一次性提取
如果想用正则来实现(毕竟你提到了正则表达式),可以写一个匹配邮箱结构的正则,直接提取出三个目标部分,甚至还能兼容单顶级域名的情况(比如test@example.com):
import re email = 'james@rmit.edu.au' # 正则匹配规则:覆盖多级顶级域名和单顶级域名两种情况 pattern = r'^([^@]+)@([^.]+)\.(.*)\.([a-z]+)$|^([^@]+)@([^.]+)\.([a-z]+)$' match_result = re.match(pattern, email) if match_result: # 处理多级顶级域名的情况(如rmit.edu.au) if match_result.group(1): first_part = match_result.group(1) domain_name = match_result.group(2) tld = match_result.group(4) # 处理单顶级域名的情况(如example.com) else: first_part = match_result.group(5) domain_name = match_result.group(6) tld = match_result.group(7) print(first_part) # 输出: james print(domain_name) # 输出: rmit print(tld) # 输出: au
这样不管是哪种后缀的邮箱,都能准确拆出你想要的三个部分啦!
内容的提问来源于stack exchange,提问作者Vanessa Dang
相关产品推荐
相关产品推荐

