-1

有没有办法从字符串中删除“\r\”?到目前为止,我设法仅删除“\ r”mystring.gsub(/\r/,"")

如何删除所有 3 个字符\r\

4

4 回答 4

2

在你的字符串中,你有文字字符“\”和“r”,还是有转义序列“\r”?

如果您有字符串foo\r\fbar,那么您的字符串长度为 8 个字符:

"foo\r\fbar".split(//).map(&:ord)
 => [102, 111, 111, 13, 12, 98, 97, 114]

您要删除的是\rand\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"
于 2013-03-16T23:35:51.053 回答
0

用这个:

mystring.gsub(/\r\\/,"")
于 2013-03-16T22:57:19.810 回答
0
mystring.gsub(/\\r\\/,"")

伊瓦伊洛是如此接近:P

我在http://rubular.com/上对其进行了测试

于 2013-03-16T23:23:09.203 回答
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\\/, '') # => ""
于 2013-03-17T06:15:15.773 回答