如何调整此正则表达式以返回我想要的匹配项?

时间:2015-08-08 03:38:36

标签: ruby regex

所以我有一个看起来像这样的字符串:

@jackie@test.com, @mike@test.com

我想要做的是在此逗号分隔列表中的任何电子邮件之前,我想删除@。我一直遇到的问题是,如果我尝试像\A那样执行常规/[\A@]+/标记,它会在该字符串中找到@的所有实例...包括中间关键@

如果我做/[\s@]+/,也会发生同样的事情。我无法弄清楚如何只看每个字符串的开头,每个字符串都是一个完整的电子邮件地址。

修改1

请注意,我需要的只是正则表达式,我已经拥有了我需要做的其他事情。具体来说,我正在实现这样的一切:

str.gsub(/@/, '').split(',').map(&:strip)

str是我的字符串。

我正在寻找的是gsub的正则表达式部分。

2 个答案:

答案 0 :(得分:1)

这是一个解决方案

str = "@jackie@test.com, @mike@test.com"
p str.split(/,[ ]+/).map{ |i| i.gsub(/^@/, '')}

输出

["jackie@test.com", "mike@test.com"]

答案 1 :(得分:1)

您可以使用以下基于负面lookbehind的正则表达式。

str.gsub(/(?<!\S)@/, '').split(',').map(&:strip)

(?<!\S)否定的lookbehind断言我们要匹配的字符或子字符串将在任何但不是非空格字符之前。因此,这匹配起始处存在的@或空格字符旁边的@

我的答案与hwnd的str.gsub(/\B@/, '')之间存在差异,我的答案与@中存在的:@不一致,但hwnd的答案却是如此。 \B匹配两个单词字符或两个非单词字符。