我正在浏览关于Rubymonk的Ruby教程,问题陈述是这样的:给定一个句子,如果句子是回文,则返回true。忽略空格和字符大小。
Rubymonk使用gsub
,
def palindrome?(sentence)
downcase_stripped_sentence = sentence.downcase.gsub(" ", "")
downcase_stripped_sentence == downcase_stripped_sentence.reverse
end
palindrome?("Never odd or even")
但我想知道我是否可以使用//x
正则表达式修饰符完成任务。
你觉得怎么样?
答案 0 :(得分:1)
不,您不能使用/x
Regexp标志。 仅适用于自身生成的模式,而不适用于正则表达式引擎的字符串匹配。
如果要忽略字符,则必须预处理匹配的字符串,这是gsub(" ", "")
正在进行的操作。
就我个人而言,我使用delete(' ')
或tr(' ', '')
要比使用gsub
那样快:
require 'fruity'
STRING = ('a'..'z').to_a * ' '
compare do
use_tr { STRING.tr(' ', '') }
use_delete { STRING.delete(' ') }
use_gsub { STRING.gsub(' ', '') }
end
# >> Running each test 4096 times. Test will take about 1 second.
# >> use_delete is similar to use_tr
# >> use_tr is faster than use_gsub by 5x ± 1.0
答案 1 :(得分:0)
这可以通过使用eval来实现,但在我看来,字符串评估是纯粹的邪恶。
gsub的功能看起来很不错。