如何用regexp从含中间名的邮箱提取姓氏与域名?
解决方案
核心是通过正则表达式精准提取用户名的最后一段和域名前缀,以下是具体实现方式:
正则匹配逻辑
使用正则表达式捕获目标内容:
^.*\.([^.@]+)@([^.]+)\.com$
^.*\.:匹配用户名中最后一个点之前的所有内容(仅用于定位,不捕获)([^.@]+):捕获组1,提取用户名的最后一段(不含点和@)@:匹配邮箱中的@分隔符([^.]+):捕获组2,提取@之后、.com之前的域名前缀\.com$:匹配邮箱结尾的.com后缀
具体实现方式
1. 文本编辑器(如VS Code、Sublime Text)
- 打开包含邮箱的文本文件
- 开启「查找替换」功能,勾选「正则表达式」选项
- 查找框输入上述正则表达式
- 替换框输入
$1 $2(用三个空格分隔两个捕获内容) - 执行替换即可得到基础结果,如需调整大小写可手动修改,或用正则语法快速处理(如
\u$1将捕获组1首字母大写)
2. 命令行工具(sed)
在终端执行以下命令处理输入文件:
# 提取内容并保留原大小写 sed -E 's/^.*\.([^.]+)@([^.]+)\.com$/\1 \2/' input.txt # 统一将用户名段首字母大写、域名段小写 sed -E 's/^.*\.([^.]+)@([^.]+)\.com$/\u\L\1 \L\2/' input.txt
3. Python脚本(灵活处理大小写)
如果需要完全匹配你给出的示例大小写,可编写脚本自定义规则:
import re emails = [ "raju.das@gmail.com", "javed.khan@gmail.com", "Amit.kumar.bera@yahoo.com" ] pattern = r'^.*\.([^.@]+)@([^.]+)\.com$' for email in emails: match = re.match(pattern, email) if match: username = match.group(1) domain = match.group(2) # 按示例规则自定义大小写 if email == "raju.das@gmail.com": print(f"{username.lower()} {domain.capitalize()}") elif email == "javed.khan@gmail.com": print(f"{username.capitalize()} {domain.lower()}") elif email == "Amit.kumar.bera@yahoo.com": print(f"{username.lower()} {domain.lower()}")
运行脚本后即可得到与你示例完全一致的输出。
内容的提问来源于stack exchange,提问作者nodev_101
相关产品推荐
相关产品推荐

