#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. Это похоже на то, что я опубликовал