我在数组中显示以下模式的字符串:
"@SomeUselessText"
在这个例子中,我想摆脱我的数组中以字符“@”开头的所有字符串。
这是我到目前为止所提出的:
def array_purge(array)
for array.each |item|
item = item.gsub(/@.*/, "")
end
end
但是,这也删除了表单的有效电子邮件地址:
"info@SomeSite.com"
...我想保留。
我猜是有一种优雅的方式来处理这个问题。也许使用“.reject!”
答案 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|^)@.*
如果您只想匹配单词字符,则可以使用.
而不是\w
。另请注意,*
仍然只与"@"
匹配,因此您可能希望使用+
来匹配至少一个字符。
(?:\s|^)@\w+
答案 3 :(得分:-1)
请改用以下正则表达式[line]:a.gsub(/^@.*/, "")
^
的意思是“从行的开头”......所以,它只匹配行的开头,然后下一个字符是@