红宝石中是否有办法完全摆脱字符串中的转义字符?

时间:2019-04-12 23:34:32

标签: ruby

我正在构建一个在命令行中显示ASCII艺术的红宝石。因为ASCII艺术包含了许多不同类型的字符,所以我很难弄清楚如何处理转义字符(反斜杠)。

如果我可以将反斜杠字符更改为该特殊宝石不常见的字符,那将是很棒的选择,尽管我似乎找不到有关如何执行此操作的任何信息。另外,我怀疑这可能会导致使用反斜杠表示的特殊字符(例如制表符和换行符)引起更多问题。

我尝试过的一件事是使用单引号,这对于单个反斜杠情况是很好的,但是通常情况下,连续会有很多反斜杠,这是行不通的。

这是我所谈论的事情的简化示例。我有一个字符串:

"How \ are \\ you \\\ doing \\\\ this \\\\\ afternoon"

我想接受上面的字符串输入,并按照显示的方式进行准确输入。但是当我说的时候,它显示:

 => "How  are \\ you \\ doing \\\\ this \\\\ afternoon"

如果我使用单引号,我会得到:

 => How  are \ you \ doing \\ this \\ afternoon

我正在构建的这个应用程序实际上对我自己来说只是一个有趣的项目,但是我很好奇一个人应该如何应对红宝石中的这种情况。

提前感谢您的时间和想法!

编辑:

该示例已简化。我最终将使用ASCII艺术(请参见此处:https://www.asciiart.eu/mythology/skeletons)。我正在寻找一种修改ASCII艺术品的抽象方法,以使用puts在终端窗口中正确显示它!

2 个答案:

答案 0 :(得分:2)

在双引号中使用反斜杠escape backslash

puts "How \\ are \\\\ you \\\\\\ doing \\\\\\\\ this \\\\\\\\\\ afternoon"

# will print
# How \ are \\ you \\\ doing \\\\ this \\\\\ afternoon

heredoc与单引号一起使用的另一种方法

puts <<~'TEXT'
How \ are \\ you \\\ doing \\\\ this \\\\\ afternoon
TEXT

# will print
# How \ are \\ you \\\ doing \\\\ this \\\\\ afternoon

答案 1 :(得分:1)

在字符串文字中转义反斜杠是Ruby解析器的一部分-您不能简单地将其关闭。作为解析器的一部分,它只能对属于程序代码本身的文字进行 操作。但是,如果您从文件,STDIN或正在读取的任何其他文件中读取字符串。

只需尝试将此字符串放入文件中,然后

puts File.readlines(<filename>) # => How \ are \\ you \\\ doing \\\\ this \\\\\ afternoon

因此,如果您在ruby代码本身中需要这些疯狂的反斜杠序列,请手动转义反斜杠。但是,如果您将它们作为程序的输入来阅读,则应该可以立即使用...