为什么不扫描(/ \ w /)与gsub(/ \ s + /,'')。length相同?

时间:2014-02-02 17:33:41

标签: ruby

我正在尝试计算文本文件中的字符,不包括空格。我的想法是使用scan;但是,我正在阅读的教程使用gsub。两者之间的产出存在差异,我想知道为什么。这是两个代码块; gsub版本是给我正确输出的版本:

total_characters_nospaces = text.gsub(/\s+/, '').length
puts "#{total_characters_nospaces} characters excluding spaces."

另一个:

chars = 0
totes_chars_no = text.scan(/\w/){|everything| chars += 1 }
puts chars

2 个答案:

答案 0 :(得分:5)

\s的反面不是{​​{1}} - 它是\w

\S相当于\w。它不包括许多其他字符,如标点符号。

[a-zA-Z0-9_]\S完全相反 - 它包含任何不是空格的字符。

答案 1 :(得分:0)

现在您的问题已经得到解答,以下是您可以采取的其他几种方式:

s = "now is the time    for all good"

s.count "^\s" # => 22

s.each_char.reduce(0) { |count, c| count + (c =~ /\S/ ? 1 : 0) } # => 22