删除Ruby中的换行符

时间:2013-06-16 10:21:43

标签: ruby

我在删除\n\r标记时遇到问题。当我使用双引号时,它可以正常工作,否则会离开"/"。使用gsub,如果没有双引号则不起作用。为什么?

<%= "Remove \n".delete('\n') %>
result: "Remove" 
<%= 'Remove \n'.delete('\n') %>
result: "Remove \" 

我发现这是因为结果它不适用于数据库的结果......

2 个答案:

答案 0 :(得分:18)

单引号字符串不处理大多数转义序列。所以,当你有这个

'\n'

字面意思是“两个字符串,第一个字符是反斜杠,第二个字符是小写'n'”。 表示“换行符”。为了使\n表示换行符,您必须将其放在双引号字符串中(它会处理此转义序列)。以下是一些例子:

"Remove \n".delete('\n') # => "Remove \n" # doesn't match
'Remove \n'.delete('\n') # => "Remove \\" # see below

'Remove \n'.delete("\n") # => "Remove \\n" # no newline in source string
"Remove \n".delete("\n") # => "Remove " # properly removed

注意这个特定示例中的反斜杠字符(第二行,使用delete调用中的单引号字符串)被忽略,因为delete中的特殊逻辑方法。有关详细信息,请参阅String#count上的文档。要绕过此操作,请使用gsub,例如

'Remove \n'.gsub('\n', '') # => "Remove "

答案 1 :(得分:2)

来自Ruby Programming/Strings

  

单引号仅支持两个转义序列。

\' – single quote
\\ – single backslash
     

除了这两个转义序列之外,单引号之间的所有其他内容都按字面处理。

因此,如果您在irb中输入\n,则会返回\\n

这就是delete

出现问题的原因
"Remove \n".delete('\n') #=> "Remove \n".delete("\\n") => "Remove \n"
'Remove \n'.delete('\n') #=> "Remove \\n".delete("\\n") => "Remove \\"