我在这里寻找一段时间并且找不到我需要的东西。我正在学习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
答案 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的正则表达式求值程序,我一直都在使用它。它唯一没有真正讨论的是贪婪和非贪婪的捕获团体,但我觉得你现在不必担心这一点。