2013-03-16 102 views
-1

有什么办法从字符串中删除“\ r \”? SOFAR我设法只mystring.gsub(/\r/,"")从字符串中删除“ n ”

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

+2

'\ r \'实际上是两个字符; '\ r'是引用字符#13的转义码。如果你的意思是“删除文字\ r和文字\”,那么这将是3个字符。你能澄清你的意思吗? – 2013-03-16 23:28:26

回答

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.您不能删除\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] 

然后你可以的“F”之前删除\r和斜线:

"foo\\r\\fbar".gsub(/\\r\\/, "") 
=> "foofbar" 

如果您有序列foo\r\\fbar

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

那么你同样可以在“F”之前删除\r和斜线:

"foo\r\\fbar".gsub(/\r\\/, "") 
=> "foofbar" 
0

使用此:

mystring.gsub(/\r\\/,"") 
+0

did not work '2.0.0:060> str.gsub(/ \ r \\ /,“”)' '=>“asdasd \ r \ fsdads”' – 2013-03-16 23:02:44

+0

Hmm from the output you show that string that string不是你说的。你显示的内容意味着字符串有'\ r',后面跟着'\ a',这是一些奇怪的转义序列。如果后面跟着\,你会得到:'asdasd \ r \\ asdads' – 2013-03-16 23:12:52

0

正如你所知道的,这是我们很难弄清楚什么字你确实需要删除,因为你是自相矛盾的。在标题中,你说"\n\",在问题中你说"\r\"。无论哪种方式,我都会这样做,以便准确找出我需要搜索的内容。

与有问题的字符串开始:

mystring = "\n\\" 

我会使用的方法bytes有红宝石告诉我,我应该用什么:

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\\/, '') # => ""