You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式从邮箱中提取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:15:38