如何删除Ruby中以某些字符开头的字符串

时间:2017-04-29 03:02:34

标签: arrays ruby regex string

我在数组中显示以下模式的字符串:

"@SomeUselessText"

在这个例子中,我想摆脱我的数组中以字符“@”开头的所有字符串。

这是我到目前为止所提出的:

def array_purge(array)
  for array.each |item|
    item = item.gsub(/@.*/, "")
  end
end

但是,这也删除了表单的有效电子邮件地址:

"info@SomeSite.com"

...我想保留。

我猜是有一种优雅的方式来处理这个问题。也许使用“.reject!”

4 个答案:

答案 0 :(得分:7)

其他建议的答案实际上并没有从阵列中清除目标物品;他们只是用空字符串替换项目。你更希望这样:

private void doLogin() {
    accountNumber = etAccountNumber.getText().toString();

    if (rbUsa.isChecked()) {
        countryCode = "USA";
    }
    else if (rbCanada.isChecked()) {
        countryCode = "CAN";
    }

    ((HostActivity)getActivity()).launchOtherFragment(accountNumber, countryCode);
}

答案 1 :(得分:1)

您可以在此使用Enumerable#grep_v

array = ['Hello', '123', '@SomeUselessText', 'info@SomeSite.com']
array.grep_v(/\A@/)
 #=> ["Hello", "123", "info@SomeSite.com"]

答案 2 :(得分:0)

检查之前是否有空格(\s),或者它是否是字符串的开头(^)。

(?:\s|^)@.*

Live Demo

如果您只想匹配单词字符,则可以使用.而不是\w。另请注意,*仍然只与"@"匹配,因此您可能希望使用+来匹配至少一个字符。

(?:\s|^)@\w+

Live Demo

答案 3 :(得分:-1)

请改用以下正则表达式[line]:a.gsub(/^@.*/, "")

^的意思是“从行的开头”......所以,它只匹配行的开头,然后下一个字符是@