ruby中的Regex/Remove斜杠

ruby中的Regex/Remove斜杠,ruby,regex,string,gsub,slash,Ruby,Regex,String,Gsub,Slash,先谢谢你 我在ruby中的正则表达式方面遇到了一些问题,或者找到了从字符串中删除斜杠的方法。以下是我的字符串的外观: string = "word \/ word" 我试图删除反斜杠和斜杠;我想要这个结果: string = "word word" 我想我错过了一些转义字符,或者谁知道呢 我试过这个: string.gsub(/\//, "") 这将删除反斜杠,但保留斜杠。我尝试过各种各样的转义字符,甚至在一些毫无意义的地方 我对正则表达式很糟糕,通常在处理字符串时非常沮丧,我只是不知所

先谢谢你

我在ruby中的正则表达式方面遇到了一些问题,或者找到了从字符串中删除斜杠的方法。以下是我的字符串的外观:

string = "word \/ word"
我试图删除反斜杠和斜杠;我想要这个结果:

string = "word  word"
我想我错过了一些转义字符,或者谁知道呢

我试过这个:

string.gsub(/\//, "")
这将删除反斜杠,但保留斜杠。我尝试过各种各样的转义字符,甚至在一些毫无意义的地方


我对正则表达式很糟糕,通常在处理字符串时非常沮丧,我只是不知所措。我确信这是显而易见的,但我遗漏了什么呢?

原因是
/
\
本身都不是Regexp中的有效字符。因此,必须在它们前面放一个
\
来转义它们。所以
\
变成
\
/
变成
\/
。将这些放在另一组斜杠中以生成Regexp文本,我们得到:

string.gsub(/\\\//, "")
另一种书写方式是:

string.gsub(/#{Regexp.escape('\/')}/, "")
您应该查看rubular,了解开发Regexp字符串的好方法


它实际上做了你想做的事情,但不是因为你认为的原因:

string = "word \/ word"
# => "word / word"
string.gsub(/\//, "")
# => "word  word"

注意:您需要gsub!如果要替换字符串的内容,gsub(/\/\\\\/,“”)将删除两个斜杠,但正如Niklas B所指出的,最好使用字符串替换。实际上字符串中只有一个斜杠,因为第一个斜杠是不必要的转义斜杠,而不是实际答案,但可以使用其他正则表达式语法,类似于
string.gsub(%r!\\/!,“”)
这样的问题可以缓解“我能逃避多少次?”的痛苦。我是否遗漏了什么?Niklas B答案在哪里?这个答案不适用:a=“/a/\a\a\\/a\a/a/\a/\a/\a”然而,我更喜欢Niklas B.下面的解决方案,因为它甚至不使用Regexp。您可以编写Regexp而无需插值:
string.gsub(Regexp.escape(\/”)
。事实上,这与@steenslag不一样。首先,我想指出我的答案中有一个错误(我已经编辑过)。字符串
'\/'
需要用单引号引起来,这样Ruby就不会将它换成
/
。接下来,
Regexp.escape
返回一个字符串,因此您的示例只是这样做:
string.gsub('/','')
,这不是您想要的。相反,您应该直接提供一个字符串,或者在实际的Regexp中使用插值的
Regexp.escape
。希望这一切都有意义!这是一种更优雅的方法。非常好的@steenslag,我不熟悉挤压法……这正是我想要的。
str = "word \/ word"
p str.delete('\/') #=>"word  word"
# to get rid of the double spaces:
p str.delete('\/').squeeze(' ') #=>"word word"