所以我有一个看起来像这样的字符串:
@jackie@test.com, @mike@test.com
我想要做的是在此逗号分隔列表中的任何电子邮件之前,我想删除@
。我一直遇到的问题是,如果我尝试像\A
那样执行常规/[\A@]+/
标记,它会在该字符串中找到@
的所有实例...包括中间关键@
。
如果我做/[\s@]+/
,也会发生同样的事情。我无法弄清楚如何只看每个字符串的开头,每个字符串都是一个完整的电子邮件地址。
修改1
请注意,我需要的只是正则表达式,我已经拥有了我需要做的其他事情。具体来说,我正在实现这样的一切:
str.gsub(/@/, '').split(',').map(&:strip)
str
是我的字符串。
我正在寻找的是gsub
的正则表达式部分。
答案 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
匹配两个单词字符或两个非单词字符。