如何用正则表达式从邮箱中提取prod/nonprod后的group_code
提取邮箱中prod/nonprod后的group_code
核心思路
不管@mail.com前的分段数量,关键是定位到prod-或nonprod-子串,提取其后面第一个连字符分隔的字段,就是目标group_code。
通用正则表达式解法
直接用正则匹配nonprod-或prod-后的首个非连字符段,无需关心前面的分段数。正则表达式如下:
(nonprod|prod)-([^-]+)
(nonprod|prod):匹配nonprod或prod关键字-:匹配分隔连字符([^-]+):捕获所有非连字符的字符(即下一个连字符前的内容,也就是group_code)
代码实现示例
Python 示例
import re # 测试邮箱列表 email_list = [ "chris-repo-nonprod-red-sens@mail.com", "ryan-prod-blue-sens@mail.com", "alice-nonprod-green@mail.com" # 边界情况:@前只有3段 ] # 正则匹配模式 pattern = r'(nonprod|prod)-([^-]+)' for email in email_list: match_result = re.search(pattern, email) if match_result: group_code = match_result.group(2) print(f"{email} -> group_code: {group_code}")
输出结果:
chris-repo-nonprod-red-sens@mail.com -> group_code: red ryan-prod-blue-sens@mail.com -> group_code: blue alice-nonprod-green@mail.com -> group_code: green
Shell 脚本示例(sed)
先截取@前的部分,再用正则提取:
# 处理单个邮箱 echo "chris-repo-nonprod-red-sens@mail.com" | cut -d'@' -f1 | sed -E 's/.*(nonprod|prod)-([^-]+).*/\2/' # 批量处理文件中的邮箱(假设邮箱每行一个) sed -E 's/(.*@)?.*(nonprod|prod)-([^-]+).*/\3/' email_list.txt
注意事项
- 如果邮箱中存在多个
prod-或nonprod-,正则会匹配第一个出现的关键字后的字段;若需匹配最后一个,可调整正则为.*(nonprod|prod)-([^-]+)(默认贪婪匹配会找到最后一个关键字)。 - 已知
prod-必然存在,因此无需担心匹配不到的情况,若需兼容无匹配的场景,可添加判断逻辑。
内容的提问来源于stack exchange,提问作者unnest_me
相关产品推荐
相关产品推荐

