繁体   English   中英

从任何路径替换红宝石中的正斜杠到反斜杠

[英]Replace of forward slash to backslash in ruby from any path

经过大量研究和头脑风暴,我最终放弃了,需要帮助将正斜杠转换为单个反斜杠,但是我无法做到。

这是我遵循的一些步骤,但是没有用

"C:/projects/test/code".gsub('/','\\')  => "C:\\projects\\test\\code" 

"C:/projects/test/code".gsub('/','\\\\') => "C:\\projects\\test\\code" 

"C:/projects/test/code".gsub('/',"\'\\'")  => "C:'projects/test/codeprojects'test/codetest'codecode" 

我期望的结果应该是:

=> "C:\projects\test\code" 

任何帮助和建议接受请帮助

您已经通过以下方法做到了:

"C:/projects/test/code".gsub('\', '\\') # => "C:\\projects\\test\\code"

您可能会对输出中的\\\\感到困惑。 这是正常的。 只要尝试把这个:

puts "C:/projects/test/code".gsub(/\//, '\\') # => C:\projects\test\code

更新:

\\在Ruby中(且不仅限于)用于多行字符串连接,因此,例如,当您仅在irb中键入它时,它将继续读取用户的输入。

关于irb的一些注意事项:

当您在irb中执行某些命令时,它会输出结果以进行调试:

irb> "foo\r\nbar"
=> "foo\r\nba"

该行包含\\ r \\ n,这意味着转到新的新行的开头。 因此,如果您想在人工模式下观看它,只需打印它即可:

irb> puts "foo\r\nbar"
foo
bar

如果要防止输出,可以使用分号:

irb> s = "foo\r\nbar";
irb* puts s
foo
bar

您在第一个示例中得到的正是您所需要的。 在IRB / Pry中,表示形式有所不同,因为REPL旨在支持复制粘贴,并且您看到的字符串是带有单反斜杠的确切字符串,即如何在双引号中键入它。 您可能还会注意到REPL表示形式中的字符串周围有双引号,它们也不属于字符串本身

这是完成任务的另一种更明确的方法:

result = "C:/projects/test/code".split('/').join('\\')
#⇒ "C:\\projects\\test\\code"

看到:

puts result
#⇒ C:\projects\test\code
result.count("\\")
#⇒ 3

实际上,Windows 确实确实知道带有正斜杠的路径,因此您可能根本不需要这种转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM