我在Ruby中有一个字符串,s
(比如说)可能有任何标准行结尾(\n
,\r\n
,\r
)。我想将所有这些转换为\n
s。什么是最好的方式?
这似乎是一个超常见的问题,但没有太多关于它的文档。显然有简单的原油解决方案,但有没有内置的处理这个?
优雅,惯用的Ruby解决方案是最好的。
编辑:意识到^M
和\r
是相同的。但仍有三种情况。 (见wikipedia。)
答案 0 :(得分:39)
自ruby 1.9起,您可以String::encode
使用universal_newline: true
将所有新行转换为\n
,同时保持编码不变:
s.encode(s.encoding, universal_newline: true)
进入已知换行状态后,您可以使用:crlf_newline
自由转换回CRLF。例如:将未知(可能是混合)结尾的文件转换为CRLF
(例如),以二进制模式读取,然后:
s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)
答案 1 :(得分:37)
最好的只是处理你想要特别改变的两种情况而不是试图变得太聪明:
s.gsub /\r\n?/, "\n"
答案 2 :(得分:3)
我认为最干净的解决方案是使用正则表达式:
s.gsub! /\r\n?/, "\n"
答案 3 :(得分:-8)
尝试在NetBeans IDE上打开它们 - 如果我想修复行结尾,它之前就问过我在其他地方开过的项目之一。我认为也可能有一个菜单选项,但这将是我尝试的第一件事。