Удаление определенных регулярных выражений в r

#r #regex #line-breaks

#r #регулярное выражение #разрывы строк

Вопрос:

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

одна строка текста r n другая строка r nof текст,

который будет отображаться как:

одна строка текста

еще одна строка

текста.

В этом примере я бы хотел удалить только второй разрыв строки, чтобы затем текст читался:

одна строка текста

еще одна строка текста

Я знаю, что шаблон » r n [a-z]», и поэтому код должен быть примерно таким

 gsub("rn[a-z]","")
  

но я не могу придумать код, который удаляет разрыв строки, сохраняя при этом строчную букву.

Спасибо!

Ответ №1:

Мы можем использовать поиск регулярных выражений

 txtN <- gsub("rn(?=[a-z])", "", txt, perl = TRUE)
cat(txtN, sep="n")
# one line of text 
# another line of text,
  

Комментарии:

1. Это сработало отлично! Большое вам спасибо за вашу помощь.

Ответ №2:

Вы можете достичь того, что вам нужно, без поиска и использовать регулярное выражение TRE, например

 s <- "one line of text rn another line rnof text,"
res <- gsub("r?n([a-z])","\1", s)
cat(res)
  

Смотрите демонстрацию IDEONE

Если вы используете шаблон (...) around a, вы определяете группу захвата, на содержимое которой вы можете ссылаться из шаблона замены.

Детали шаблона:

  • r?n — разрыв строки (или rn или n )
  • ([a-z]) — строчная буква ASCII внутри группы 1.

Замена:

  • 1 — нумерованная обратная ссылка на содержимое группы 1.

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

PS: Если вы заинтересованы в использовании регулярных выражений PCRE, есть одна очень хорошая конструкция, отличная от поддержки lookahead — a R , которая соответствует любому стилю перевода строки. Тогда я бы предложил:

 gsub("\R(?=[a-z])", "", txt, perl = TRUE)
  

Ответ №3:

Для этого вам нужно использовать a positive lookahead .

Например:

 text = "one line of text rn another line rnof text,"

fixed = gsub("rn(?=[a-z])", "", text, perl = T)

cat(fixed)
#> one line of text 
#>  another line of text,
  

Комментарии:

1. Это похоже на то, что я опубликовал