如何使用Ruby删除回车?
我认为这个代码可以工作,但是正则expression式不会匹配\ r \ n。 我在一个hex编辑器中查看了我正在读取的数据,并确认文件中确实存在hexD和hexA模式。
我也尝试了正则expression式/ \ 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
除了替代scheme之外,我也很高兴知道自己做错了什么(为了方便我的学习)。 🙂
你做什么时候puts lines
? 这会给你一个线索。
默认情况下, File.open
以文本模式打开文件,所以\r\n
字符将自动转换为\n
。 也许这就是lines
总是等于lines2
的原因。 为了防止Rubyparsing行结束使用rb
模式:
C:\>复制conlala.txt 一个 文件 同 许多 线 ^ Z C:\> irb irb(main):001:0> text = File.open('lala.txt')。read =>“a \ nfile \ n用\ 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
返回删除前导和尾随空白的str的副本。
例如
" hello ".strip #=> "hello" "\tgoodbye\r\n".strip #=> "goodbye"
使用gsub
string = string.gsub(/\r/," ") string = string.gsub(/\n/," ")
一般来说,当我处理\ r或\ n剥离时,我会通过做类似的事情来寻找两者
lines.gsub(/\r\n?/, "\n");
我发现,根据数据的保存方式(使用的操作系统,使用的编辑器,当时木星与Io的关系),在回车之后可能有也可能不是新行。 看起来很奇怪,你看到在hex模式下的两个字符。 希望这可以帮助。
modified_string = string.gsub(/\s+/, ' ').strip
lines2 = lines.split.join("\n")
"still the same\n".chomp
要么
"still the same\n".chomp!
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-chomp
如果你使用的是Rails,那就是一种squish
方法
"\tgoodbye\r\n".squish => "goodbye"
"\tgood \t\r\nbye\r\n".squish => "good bye"
以下情况如何?
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>
为什么不以文本模式而不是二进制模式读取文件?
你可以使用这个:
my_string.strip.gsub(/\s+/, ' ')
lines.map(&:strip).join(" ")
我认为你的正则expression式几乎是完整的 – 这就是我要做的:
lines2 = lines.gsub(/[\r\n]+/m, "\n")
在上面,我已经把\ r和\ n放到一个类中(这样,它们可能出现的顺序并不重要),并添加了“+”限定符(这样“\ r \ n \ r \ n \ r \ n“也会匹配一次,整个事情会replace为”\ n“)