使用Ruby删除特殊字符,但不删除空格

时间:2014-09-08 16:38:09

标签: ruby regex

我在这里寻找一段时间并且找不到我需要的东西。我正在学习Ruby(1.9),我正在尝试用文本文件做一些基本的东西。我试图使用RegEx删除非字母和仅在行开头的空格,忽略标记之间的空格(我试图计算文件中的单词,因此当我希望单词之间的空格保持不变时)。

例如:

555 r6ub6y i7s e7a0sy... w1o2w4.

更改为:

ruby is easy... wow.

到目前为止,我使用命令行来测试ruby rubyfile.rb < test.txt

$stdin.each do |line|
    line.chomp!.downcase!
    line.gsub!(/[^a-zA-Z]/, "") #this takes away my spaces!
    puts line
end

2 个答案:

答案 0 :(得分:10)

[^a-zA-Z. ]

也添加一个空格。

答案 1 :(得分:4)

由于您现在只指定删除数字,因此它将作为一行使用。

"555 r6ub6y i7s e7a0sy... w1o2w4.".gsub(/\d/,'').strip 
#=>"ruby is easy... wow."

它基本上表示删除所有数字和前导/尾随空格。

现在你的正则表达式会删除除大小写字母之外的所有内容。不确定你想删除的其他类型的字符,但是如果你只想要大写/小写字母空格和句号,这样的东西也可能对你有效

"555 r6ub6y i7s e7a0sy... w1o2w4.".gsub(/[^a-zA-Z\s.]/,'').strip 
#=>"ruby is easy... wow."

另外,当在正则表达式中包含空格时,我总是倾向于使用\s而不是[ ]这样的隐含空格,因为我觉得它增加了可读性,因为[a-zA-Z ]可能是一个拼写错误,应该不包括空格,但[a-zA-Z\s]非常明确地说我想要空格。

想要了解有关Regex的更多信息,请查看Rubular它是Ruby的正则表达式求值程序,我一直都在使用它。它唯一没有真正讨论的是贪婪和非贪婪的捕获团体,但我觉得你现在不必担心这一点。