当前位置:  开发笔记 > 编程语言 > 正文

如何用Ruby删除回车?

如何解决《如何用Ruby删除回车?》经验,为你挑选了8个好方法。

我认为这段代码可行,但正则表达式与\ 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

除了替代方案,我很高兴知道我做错了什么(为了方便我学习).:)



1> Ian Vaughan..:

使用String#strip

返回str的副本,其中删除了前导和尾随空格.

例如

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

使用gsub

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


删除所有周围的空格!=删除回车
它不会过滤文本中间的换行符:"line1 \n line2".strip#=>"line1 \n line2"

2> localshred..:

通常当我处理剥离\ r或\n时,我会通过做类似的事情来寻找两者

lines.gsub(/\r\n?/, "\n");

我发现根据数据的保存方式(使用的操作系统,使用的编辑器,Jupiter当时与Io的关系),回车后可能有也可能没有换行符.在十六进制模式下看到两个字符看起来很奇怪.希望这可以帮助.



3> Rômulo Cecco..:

你做puts lines什么的?这会给你一个线索.

默认情况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\nfile\r\nwith\r\nmany\r\nlines\r\n"
irb(main):003:0>

但是根据你的问题和代码,我看到你只需要使用默认修饰符打开文件.您不需要任何转换,可以使用较短的转换File.read.


有一个答案,更多的upvotes面向"剥离新线"进一步向下:http://stackoverflow.com/a/7095275/403234

4> Vik..:
modified_string = string.gsub(/\s+/, ' ').strip


这将替换任何空格字符,而不仅仅是CR/LF

5> 小智..:

如果您使用的是Rails,则有一种squish方法

"\tgoodbye\r\n".squish => "goodbye"

"\tgood \t\r\nbye\r\n".squish => "good bye"



6> 小智..:
lines2 = lines.split.join("\n")


这也将剥离标签和空白,这可能不是用户想要的.

7> Joel AZEMAR..:

"still the same\n".chomp
要么
"still the same\n".chomp!

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-chomp



8> mwilliams..:

以下怎么样?

irb(main):003:0> my_string = "Some text with a carriage return \r"
=> "Some text with a carriage return \r"
irb(main):004:0> my_string.gsub(/\r/,"")
=> "Some text with a carriage return "
irb(main):005:0>

要么...

irb(main):007:0> my_string = "Some text with a carriage return \r\n"
=> "Some text with a carriage return \r\n"
irb(main):008:0> my_string.gsub(/\r\n/,"\n")
=> "Some text with a carriage return \n"
irb(main):009:0>

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有