Заменить обратную косую черту в строке - PullRequest
0 голосов
/ 26 декабря 2018

Мне нужно вдвое сократить все обратные слэши.

body = '\\u001F\\x8B\\b\\u00003g#\\\\\\u0002\\'

Мне нужен вывод, подобный этому:

'\u001F\x8B\b\u00003g#\\\u0002\'

Я пробовал это:

body.gsub("\\\\\\", "\\")
\\ -> \ (ok)
\\\\ -> \\ (ok)
\\\\\\ > \ (not ok)

У меня естьпрочитайте, что ruby ​​как-то анализирует строку дважды, возможно, это как-то связано с моим нежелательным выводом.Есть идеи?

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Ваша строка вывода недействительна.Я думаю, что вы ищете:

body.squeeze("\\")

Squeeze заменяет вхождение нескольких последовательных символов в один символ и возвращает новую строку.

0 голосов
/ 27 декабря 2018

Я завернул этот текст в eval, и он вернул именно то, что я хотел.Да, это небезопасно, но пока не найдено решений

eval("\"#{body}\"")
0 голосов
/ 26 декабря 2018

Вероятно, что происходит, если вы печатаете строку с помощью p или используете inspect и печатаете строку нормально, вы получите то, что ожидаете.

body = '\\u001F\\x8B\\b\\u00003g#\\\\\\u0002\\'
p body #> "\\u001F\\x8B\\b\\u00003g#\\\\\\u0002\\"
puts body.inspect #> "\\u001F\\x8B\\b\\u00003g#\\\\\\u0002\\"
puts body #> \u001F\x8B\b\u00003g#\\\u0002\

Если вывы используете IRB, просто набираете имя переменной, вызовите проверку автоматически, например

irb(main):001:0> body = '\\u001F\\x8B\\b\\u00003g#\\\\\\u0002\\'
irb(main):002:0> body
=> "\\u001F\\x8B\\b\\u00003g#\\\\\\u0002\\"

Другими словами, строка, скорее всего, уже отформатирована так, как вы хотите, вы просто не увидите ее без информации о проверке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...