如何使用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
相关产品推荐
相关产品推荐

