有没有办法从字符串中删除“\ r \”?
Sofar我设法仅使用mystring.gsub(/\r/,"")
如何删除所有3个字符\r\
?
答案 0 :(得分:2)
在你的字符串中,你有文字字符“\”和“r”,还是你有转义序列“\ r”?
如果您有字符串foo\r\fbar
,那么您的字符串长度为8个字符:
"foo\r\fbar".split(//).map(&:ord)
=> [102, 111, 111, 13, 12, 98, 97, 114]
您要删除的内容包括\r
和\f
字符,或字符代码13和12.您无法仅删除{{中的前导斜杠1}},因为\f
只是一个字符。如果是这种情况,您可以使用:
\f
但是,如果您有文字序列"foo\r\fbar".gsub(/\r\f/, "")
=> "foobar"
:
foo\\r\\fbar
然后你可以删除{f}之前的"foo\\r\\fbar".split(//).map(&:ord)
=> [102, 111, 111, 92, 114, 92, 102, 98, 97, 114]
和斜杠:
\r
如果你有序列"foo\\r\\fbar".gsub(/\\r\\/, "")
=> "foofbar"
:
foo\r\\fbar
然后你也可以在“f”前删除"foo\r\\fbar".split(//).map(&:ord)
=> [102, 111, 111, 13, 92, 102, 98, 97, 114]
和斜杠:
\r
答案 1 :(得分:0)
使用此:
mystring.gsub(/\r\\/,"")
答案 2 :(得分:0)
答案 3 :(得分:0)
正如您所知,我们很难弄清楚您实际需要删除的字符,因为您自相矛盾。在标题中,您说"\n\"
,并在问题中说"\r\"
。无论哪种方式,这就是我要做的事情,以便找出我需要搜索的内容。
从有问题的字符串开始:
mystring = "\n\\"
我使用bytes
方法让Ruby告诉我应该使用的内容:
mystring = "\n\\" # => "\n\\"
mystring.bytes.map{ |b| '%02x' % b } # => ["0a", "5c"]
mystring.tr("\x0a\x5c", '') # => ""
mystring.gsub(/\x0a\x5c/, '') # => ""
mystring = "\r\\" # => "\r\\"
mystring.bytes.map{ |b| '%02x' % b } # => ["0d", "5c"]
mystring.tr("\x0d\x5c", '') # => ""
mystring.gsub(/\x0d\x5c/, '') # => ""
处理转义字符可能是任何编程语言的痛苦,但如果我查看构成字符的确切字节,我就不会出错,只要我处理ASCII。如果它是另一个字符集,我会想要使用chars
方法,并适当调整我的模式:
mystring = "\n\\"
mystring.chars.to_a # => ["\n", "\\"]
mystring.gsub(/\n\\/, '') # => ""
mystring.tr("\n\\", '') # => ""
mystring = "\r\\"
mystring.chars.to_a # => ["\r", "\\"]
mystring.tr("\r\\", '') # => ""
mystring.gsub(/\r\\/, '') # => ""