Ответ 1
Это работает для меня:
#!/usr/bin/ruby
$s = "foo\n\n\nbar\nbaz\n\n\nquux";
puts $s
$s.gsub!(/[\n]+/, "\n");
puts $s
У меня есть script, написанный в ruby. Мне нужно удалить любые повторяющиеся строки новой строки (например.)
\n
\n
\n
к
\n
Моя текущая попытка работала (или, вернее, нет) с помощью
str.gsub!(/\n\n/, "\n")
Который не дал мне никаких изменений в выходе. Что я делаю неправильно?
Это работает для меня:
#!/usr/bin/ruby
$s = "foo\n\n\nbar\nbaz\n\n\nquux";
puts $s
$s.gsub!(/[\n]+/, "\n");
puts $s
Используйте более идиоматический String#squeeze
вместо gsub
.
str = "a\n\n\nb\n\n\n\n\n\nc"
str.squeeze("\n") # => "a\nb\nc"
Простое расщепление и рекомбинация линий даст желаемый результат
>> "one\ntwo\n\nthree\n".split.join("\n")
=> "one\ntwo\nthree"
Изменить: я только заметил, что это заменит ВСЕ пробелы подстроки новыми символами, например.
>> "one two three\n".split.join("\n")
=> "one\ntwo\nthree"
Сначала убедитесь, что это то, что вы хотите!
Вам нужно сопоставить более одной новой строки до бесконечной суммы. Ваш пример кода будет работать только с небольшим изменением:
str.gsub!(/\n+/, "\n")
Например:
str = "this\n\n\nis\n\n\n\n\na\ntest"
str.gsub!(/\n+/, "\n") # => "this\nis\na\ntest"
Вы уверены, что это не должно быть \\n\n\n/, "\n", что вы, кажется, хотите в своем вопросе выше.
Кроме того, вы уверены, что он не делает окна новой строки "\ r\n"?
EDIT: Дополнительная информация
За комментарий
"Количество строк новой строки может меняться. Различные строки имеют от 2 до 5 строк новой строки.
если вы хотите только нажать 2-5 строк, попробуйте это
/\n{2,5}/, "\n"
Простое разделение вызовов также вычеркивает все ваши пробелы.
Вам нужно передать \n
для разделения
>> "one ok \ntwo\n\nthree\n".split(/\n+/).join("\n")
=> "one ok \ntwo\nthree"
Кроме того, также работает с
str.gsub!/\n ^\s *\n/, "\n\n"
где
Ruby требует, чтобы обратная косая черта бежала иначе, чем вы предоставили.
str.sub!("\\\\n+\\\\n","\\\\n")
Попробуй это, я работал у меня:
s = test\n\n\nbar\n\n\nfooo
s.gsub("\n\n", '')