如何在ruby中替换字符串中的\ r \ n

时间:2014-10-30 08:25:03

标签: ruby regex

我有一个看起来像这样的字符串。

mystring="The Body of a\r\n\t\t\t\tSpider"

我想用空格替换所有\ r,\ n,\ t等。

我为此写的代码是:

mystring.gsub(/\\./, " ")

但这并不是对字符串做任何事情。

帮助。

4 个答案:

答案 0 :(得分:7)

\r\n\tescape sequences,表示回车,换行和制表符。虽然它们被写成两个字符,但它们被解释为作为单个字符:

"\r\n\t".codepoints #=> [13, 10, 9]

因为这是一个常见的要求,所以shortcut \s匹配所有空白字符:

mystring.gsub(/\s/, ' ')
#=> "The Body of a      Spider"

\s+匹配多个空白字符:

mystring.gsub(/\s+/, ' ')
#=> "The Body of a Spider"

/\s/相当于/[ \t\r\n\f]/

答案 1 :(得分:2)

String#tr专为流符号替换而设计。它似乎比String#gsub

更快一些
mystring.tr "\r", ' '

它还有一个insplace版本(这将替换所有回车,换行和带空格的空格):

mystring.tr! "\s\r\n\t\f", ' '

答案 2 :(得分:1)

斯特芬的答案非常酷,因为总是有非常简短的解决方案。但在这里我试图删除所有特殊字符。 [张贴为可选解决方案];)

 > a = "The Body of a\r\n\t\t\t\tSpider"
 => "The Body of a\r\n\t\t\t\tSpider" 
 > a.gsub(/[^0-9A-Za-z]/, ' ')
 => "The Body of a      Spider" 

答案 3 :(得分:0)

您可以使用strip,然后在字符串中添加空格

mystring.strip . " "

如果您在字符串中确实有\ r \ n \ t:

mystring="The Body of a\r\n\t\t\t\tSpider"
mystring.split(/[\r\t\n]/)