删除Ruby中的换行符
我在删除\n
和\r
\n
标记时遇到问题。 当我使用双引号时,它可以正常工作,否则它会留下"/"
。 使用gsub,如果没有双引号则不起作用。 为什么?
result: "Remove" result: "Remove \"
我发现这是因为结果它不适用于数据库的结果……
单引号字符串不处理大多数转义序列。 所以,当你有这个
'\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的文档。 要绕过此function,请使用gsub
'Remove \n'.gsub('\n', '') # => "Remove "
来自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 \\"