有没有办法从字符串中删除“\r\”?到目前为止,我设法仅删除“\ r”mystring.gsub(/\r/,"")
如何删除所有 3 个字符\r\
?
在你的字符串中,你有文字字符“\”和“r”,还是有转义序列“\r”?
如果您有字符串foo\r\fbar
,那么您的字符串长度为 8 个字符:
"foo\r\fbar".split(//).map(&:ord)
=> [102, 111, 111, 13, 12, 98, 97, 114]
您要删除的是\r
and\f
字符,或字符代码 13 和 12。您不能只删除 中的前导斜杠\f
,因为\f
它只是一个字符。如果这是您的情况,您可以使用:
"foo\r\fbar".gsub(/\r\f/, "")
=> "foobar"
但是,如果您有文字序列foo\\r\\fbar
:
"foo\\r\\fbar".split(//).map(&:ord)
=> [102, 111, 111, 92, 114, 92, 102, 98, 97, 114]
然后您可以删除\r
“f”之前的和斜杠:
"foo\\r\\fbar".gsub(/\\r\\/, "")
=> "foofbar"
如果你有序列foo\r\\fbar
:
"foo\r\\fbar".split(//).map(&:ord)
=> [102, 111, 111, 13, 92, 102, 98, 97, 114]
然后您同样可以删除\r
“f”之前的和斜杠:
"foo\r\\fbar".gsub(/\r\\/, "")
=> "foofbar"
用这个:
mystring.gsub(/\r\\/,"")
如您所知,我们很难弄清楚您实际需要删除哪些字符,因为您自相矛盾。在你说的标题和你说"\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\\/, '') # => ""