0

我有以下字符串:

coolStr = '<!--  \\n    @author       Phil R\\n    @date         6.5.2012\\n    @description  Me T\\\\nesting S\\\\\\\\ntuff\\n-->'

该字符串似乎已被双重转义。我想把字符串变成:

newCoolStr = "<!--  \n    @author       Phil R\n    @date         6.5.2012\n    @description  Me T\\nesting S\\\\ntuff\n-->"

所以如果你写:

puts newCoolStr

你会得到:

<!--  
    @author       Phil R
    @date         6.5.2012
    @description  Me T\nesting S\\ntuff
-->

我一直没能做到这一点。我能得到的最接近的是能够将反斜杠减半:

coolStr.gsub(/\\\\/) {'\\'}

但是由于我不明白的原因,这不会捕获“\\n”的实例,然后您最终会陷入这种情况,换行符与最初显示为“\\\\n”的内容之间没有区别。示例是:

<!--  \\n    @author       Phil R\\n    @date         6.5.2012\\n    @description  Me T\\nesting S\\\\ntuff\\n-->

似乎是一个相当简单的问题,但我似乎无法理解。实现这一目标的最佳方法是什么?

4

2 回答 2

1

一个问题是,根据 ruby​​,字符串中的换行符不是换行符。它是与n字符相邻的转义反斜杠。

你可以

gsub(/\\+n/,"\n")

但是您需要一种方法来区分所需的换行符和描述中您不想转义的内容。这与您的应用程序更相关。

在这种情况下,你可以做一个快速的脏话,说如果换行符后面跟着一个单词字符,把它当作文本。

str =  "coolStr = '<!--  \\n    @author       Phil R\\n    @date         6.5.2012\\n    @description  Me T\\\\nesting S\\\\\\\\ntuff\\n-->'"

puts str.gsub(/\\+n(?!\w)/,"\n")

coolStr = '<!--  
@author       Phil R
@date         6.5.2012
@description  Me T\\nesting S\\\\ntuff
-->'
于 2012-06-10T22:15:58.657 回答
0

我遇到了 GreyCat 的解决方案:

如何从 ruby​​ 中取消转义 c 样式的转义序列?

这正是我所需要的。它消除了双重转义并解决了我的问题。支持 GreyCat 的解决方案并将其标记为我自己问题的答案。

于 2012-06-10T18:30:03.140 回答