如何用Ruby删除回车?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我认为这段代码可以工作,但是正则表达式并不匹配\r \n。我在一个十六进制编辑器中查看了我正在读取的数据,并验证文件中确实存在十六进制D和十六进制A模式。

我也尝试了正则表达式/ \ xD \ xA / m和/ \ x0D \ x0A / m,但它们也不匹配。

这是我现在的代码:

   lines2 = lines.gsub( /\r\n/m, "\n" )
   if ( lines == lines2 )
       print "still the same\n"
   else
       print "made the change\n"
   end

除了替代方案之外,我做错了什么?

提问于
用户回答回答于

默认情况下File.open,文本模式下打开文件,所以你的\r\n角色将被自动转换为\n。也许这lines就是始终等于的原因lines2。为了防止Ruby解析行结束符,使用该rb模式:

C:\> copy con lala.txt
a
file
with
many
lines
^Z

C:\> irb irb(main):001:0> text = File.open('lala.txt')。read =>“a \ nfile \ nwith \ nmany \ nlines \ n” irb(main):002:0> bin = File.open('lala.txt','rb')。read =>“a \ r \ n文件\ r \ n用\ r \ n \ n \ r \ nlines \ r \ n” IRB(主):003:0>

但是从你的问题和代码中,我发现你只需要使用默认的修饰符来打开文件。你不需要任何转换,可以使用更短的File.read

用户回答回答于

使用String#strip

"    hello    ".strip   #=> "hello"   
"\tgoodbye\r\n".strip   #=> "goodbye"

使用gsub

string = string.gsub(/\r/," ")
string = string.gsub(/\n/," ")

扫码关注云+社区