Ruby Regex半反斜杠同时保留线条

时间:2012-06-10 07:54:41

标签: ruby regex

我有以下字符串:

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-->

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

2 个答案:

答案 0 :(得分: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
-->'

答案 1 :(得分:0)

我遇到过GreyCat的解决方案:

How do I unescape c-style escape sequences from ruby?

这正是我所需要的。它消除了双重逃逸并解决了我的问题。赞成GreyCat的解决方案并将其标记为我自己问题的答案。