从字符串中提取后对电子邮件的一部分进行排序

时间:2018-08-31 15:59:57

标签: ruby regex sorting

我收到了由公司名称和电子邮件组成的列表(按名称(first.last@company.org)格式化),然后从中提取电子邮件并将其输入到数组中。

ary = ["Babe.Ruth@company.com", "Joe.Black@company.com", "Hannibal.Smith@company.com"]

我如何有效地按电子邮件的姓氏部分(在句号和@之间)对电子邮件进行排序,从而使它具有这样的列表?

Joe.Black@company.org
Babe.Ruth@company.org
Hannibal.Smith@company.org

2 个答案:

答案 0 :(得分:5)

arr.sort_by { |s| s[/(?<=\.)[^@]+/] }
  #=> ["Joe.Black@company.org", "Babe.Ruth@company.org", "Hannibal.Smith@company.org"]

(?<=\.)是令人反感的。它要求在匹配项之前紧跟一个句点,但是该句点不是匹配项的一部分。参见Enumerable#sort_by

答案 1 :(得分:1)

没有正则表达式的类似解决方案

arr.sort_by { |s|
   s.split('@').first.split('.').last 
} 

一步一步

'Joe.Black@company.org'.split('@')➡['Joe.Black','company.org']

['Joe.Black','company.org']。first➡'Joe.Black'

'Joe.Black'.split('。')➡['Joe','Black']

['Joe','Black']。last➡'Black'

该块返回“ Black”,它将用于对“ Joe.Black@company.org”进行排序

article on sort vs sort_by