我在数组中显示以下模式的字符串:
"@SomeUselessText"
在此示例中,我想摆脱以"@"字符开始的数组中的所有字符串。
这就是我到目前为止提出的:
def array_purge(array)
for array.each |item|
item = item.gsub(/@.*/, "")
end
end
但是,这也摆脱了表格的有效电子邮件地址:
"info@SomeSite.com"
...我想保留。
我猜想有一种优雅的处理方式。也许使用" .-拒绝!"
其他建议的答案实际上并未从数组中清除目标项目;他们只是用空字符串代替项目。您更有可能想要:
def array_purge(array)
array.reject! { |item| item.start_with?('@') }
end
>> array = ['Hello', '123', '@SomeUselessText', 'info@SomeSite.com']
>> array_purge(array)
=> ["Hello", "123", "info@SomeSite.com"]
您可以在此处使用Enumerable#grep_v
array = ['Hello', '123', '@SomeUselessText', 'info@SomeSite.com']
array.grep_v(/A@/)
#=> ["Hello", "123", "info@SomeSite.com"]
检查是否有whitespace( s
(或是否是字符串的开始( ^
(。
(?:s|^)@.*
live demo
如果您只想匹配单词字符,则可以使用w
而不是使用CC_5。另请注意,*
仍然只匹配"@"
,因此您可能需要使用+
而不是与至少一个字符匹配。
(?:s|^)@w+
实时演示
使用以下正则表达式[line]而不是: a.gsub(/^@.*/, "")
^
的意思是"从行的开头" ...因此,它仅在有行的开始时匹配,然后下一个字符是 @