我尝试使用gsub用正斜杠替换反斜杠但它不起作用

时间:2016-12-02 06:15:25

标签: ruby string

puts "C:\WATIR\gopal\**".gsub("\\", "/")

它给了我输出

C:WATIRgopal**

有谁能告诉我哪里出错了?

2 个答案:

答案 0 :(得分:2)

问题不在于#gsub,而在于字符串结构本身:

"C:\WATIR\gopal\**" # => "C:WATIRgopal**"

\用于转义字符。例如\W会尝试转义W字符,而不是制作两个字符 - \W。修复它的一种方法是使用另一个\来逃避转义:

"C:\\WATIR\\gopal\\**" # => "C:\\WATIR\\gopal\\**"

更好的方法是使用单引号,其中\没有特殊含义:

'C:\WATIR\gopal\**' # => "C:\\WATIR\\gopal\\**"

此外,如果您想要将一个字符替换为另一个字符,请更喜欢#tr而不是#gsub

'C:\WATIR\gopal\**'.tr('\\', '/') # => "C:/WATIR/gopal/**"

答案 1 :(得分:1)

在你的问题中,。

<强> puts "C:\WATIR\gopal\**".gsub("\\", "/")  给出

C:WATIRgopal**

因为它将\视为转义字符并将其保留。

单引号:

'C:\WATIR\gopal\**'.gsub("\\", "\/")

使用单引号防止转义&#39; <&#39;

双引号:

如果您只想使用双引号:

<强> puts "C:\\WATIR\\gopal\\**".gsub("\\", "\/")

这给出了o / p:

<强> C:/WATIR/gopal/**

这是因为&#39; <&#39;被解释为双引号字符串中的特殊字符,但在单引号字符串中,字符按原样保留

单引号和双引号之间的区别:

Ruby只解释双引号字符串中的转义序列。

在单引号字符串中,只有\(反斜杠反斜杠)和\&#39; (反斜杠引用)被视为特殊字符。

只有在需要更多解释时才应使用双引号字符串。

否则,单引号可以提升性能。