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

如何使用Ruby移除邮箱地址中特定后缀之后的多余公共子串

问题描述

我之前参考过Stack Overflow的相关帖子,给出的方案和我的需求相近但不完全匹配。
我现在有以下带冗余后缀的邮箱数据:

email1 = 'giovanna.macedo@lojas100.com.br-215000695716b.ct.domain.com.br'
email2 = 'alvaro-neves@stockshop.com-215000695716b.ct.domain.com.br'
email3 = 'filiallojas123@filiallojas.net-215000695716b.ct.domain.com.br'

我需要移除每个邮箱字符串中.br、.com、.net后缀之后的全部子串,最终得到如下结果:

email1 = 'giovanna.macedo@lojas100.com.br'
email2 = 'alvaro-neves@stockshop.com'
email3 = 'filiallojas123@filiallojas.net'

请问如何通过Ruby实现该需求?

解决方案

用正则匹配处理是最直接的方案,注意要优先匹配长度更长的后缀(比如.com.br要早于.com匹配,避免误截断),两种实现方式可选:

方式1:直接捕获有效前缀

# 单字符串处理示例
raw_email = 'giovanna.macedo@lojas100.com.br-215000695716b.ct.domain.com.br'
valid_email = raw_email.match(/\A.*?(?:\.com\.br|\.com|\.net)/).to_s
# 输出结果:"giovanna.macedo@lojas100.com.br"

方式2:删除后缀后的冗余内容

raw_email = 'alvaro-neves@stockshop.com-215000695716b.ct.domain.com.br'
raw_email.sub!(/(?<=\.com\.br|\.com|\.net).*\z/, '')
# 输出结果:"alvaro-neves@stockshop.com"

批量处理完整示例

emails = [
  'giovanna.macedo@lojas100.com.br-215000695716b.ct.domain.com.br',
  'alvaro-neves@stockshop.com-215000695716b.ct.domain.com.br',
  'filiallojas123@filiallojas.net-215000695716b.ct.domain.com.br'
]

processed = emails.map { |e| e.match(/\A.*?(?:\.com\.br|\.com|\.net)/).to_s }

# 验证输出
processed.each_with_index do |res, i|
  puts "email#{i+1} = #{res.inspect}"
end

运行后输出完全符合需求:

email1 = "giovanna.macedo@lojas100.com.br"
email2 = "alvaro-neves@stockshop.com"
email3 = "filiallojas123@filiallojas.net"

内容的提问来源于stack exchange,提问作者RodSaal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:15:02