Как заменить несколько новых строк подряд одной новой строкой с помощью Ruby

Это то, что вы ищете?

plot_2 <- 
  Infil_Data2 %>% 
  split(.$Site_ID) %>% 
  map2(names(.), ~ggplot(.x, aes(Sqrt_Time.x, Cal_Vol_cm)) + 
         geom_point() +
         labs(title = paste(.y)) +
         theme(plot.margin = unit(c(1, 5, 1, 1), "cm")) +
         annotation_custom(tableGrob(cbind(c("Alpha1", "n_ho", "A"), 
                                           c(.x$Alpha1[1],
                                             .x$n_ho[1],
                                             .x$A[1])), 
                                     rows = NULL), 
                           xmin = unit(20, "npc"), xmax = unit(25, "npc"),
                           ymin = 0.05, ymax = 0.1))

(я исключил некоторые коды для слоев geom / другие аспекты внешнего вида графика, так как я не думаю, что они являются центральными заданный вопрос.)

plot

24
задан Macha 13 March 2010 в 20:24
поделиться

6 ответов

Это работает на меня:

#!/usr/bin/ruby

$s = "foo\n\n\nbar\nbaz\n\n\nquux";

puts $s

$s.gsub!(/[\n]+/, "\n");

puts $s
33
ответ дан 28 November 2019 в 22:53
поделиться

Просто разделение и переобъединение строк дадут желаемый результат

>> "one\ntwo\n\nthree\n".split.join("\n")
=> "one\ntwo\nthree"

Править: Я просто заметил, что это заменит ВСЕ пробельные подстроки новыми строками, например.

>> "one    two three\n".split.join("\n")
=> "one\ntwo\nthree"

Сначала проверьте, что это - то, что Вы хотите!

6
ответ дан 28 November 2019 в 22:53
поделиться

Необходимо соответствовать больше чем одной новой строке до бесконечной суммы. Ваш пример кода будет работать только с незначительной тонкой настройкой:

str.gsub!(/\n+/, "\n")

Например:

str = "this\n\n\nis\n\n\n\n\na\ntest"
str.gsub!(/\n+/, "\n")  # => "this\nis\na\ntest"
5
ответ дан 28 November 2019 в 22:53
поделиться

Вы уверенный, что это не должен быть/\n\n\n/, "\n" это, что Вы, кажется, желаете в своем вопросе выше.

также, действительно ли Вы уверены, что это не делает новой строки окон "\r\n"?

Править: Дополнительная информация

На комментарий

"Количество новых строк может измениться. Различные строки имеют между 2 и 5 новыми строками".

если Вы только хотите совершить нападки, строки 2-5 пробуют это

/\n{2,5}/, "\n"
4
ответ дан 28 November 2019 в 22:53
поделиться

Просто вызов разделения также обрежет весь Ваш пробел.

Необходимо передать \n разделять

>> "one   ok \ntwo\n\nthree\n".split(/\n+/).join("\n")
=> "one  ok \ntwo\nthree"
1
ответ дан 28 November 2019 в 22:53
поделиться

Ruby нужны обратные косые черты, которых оставляют по-другому, чем Вы обеспечили.

str.sub!("\\\\n+\\\\n","\\\\n")

http://www.ruby-forum.com/topic/176239

-2
ответ дан 28 November 2019 в 22:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: