如何删除以Ruby中特定字符结尾的字符串

时间:2017-05-12 21:14:48

标签: ruby regex

根据“How to Delete Strings that Start with Certain Characters in Ruby”,我知道删除以字符“@”开头的字符串的方法是:

email = email.gsub( /(?:\s|^)@.*/ , "") #removes strings that start with "@"

我还要删除以“。”结尾的字符串。灵感来自“Difference between \A \z and ^ $ in Ruby regular expressions”我提出了:

email = email.gsub( /(?:\s|$).*\./ , "") 

基本上我使用gsub删除胡萝卜的美元符号,并在结束括号后反转部分的顺序(确保逃避期间)。但是,它没有做到这一点。

我想匹配和删除的一个例子是:

"a8&23q2aas."

3 个答案:

答案 0 :(得分:2)

你太近了。

email = email.gsub( /.*\.\s*$/ , "")

不同之处在于,您没有考虑引用字符串与描述您希望触发的条件的正则表达式令牌之间的关系。在这里,您试图找到一个句点(\.),后面只有空格(\s)或行尾($)。我会把上面的正则表达式看作“任何长度的任何字符后跟一段时间,然后是任意数量的空格,然后是行尾。”

正如评论者指出的那样,有一种更简单的方法:String#end_with?

答案 1 :(得分:1)

我会用:

words = %w[@a day in the life.]
# => ["@a", "day", "in", "the", "life."]

words.reject { |w| w.start_with?('@') || w.end_with?('.') }
# => ["day", "in", "the"]

如果你只关心起始或结束字符,那么使用正则表达式是有点过分的,事实上,与使用内置方法相比,正则表达式会减慢你的代码。

  

我真的很想坚持使用gsub ....

gsub是从数组中删除元素的错误方法。 可以用于将字符串转换为空字符串,但这不会从数组中删除该元素。

答案 2 :(得分:-2)

def replace_suffix(str,suffix)
  str.end_with?(suffix)? str[0, str.length - suffix.length] : str 
end