2016-10-11 3 views
2

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

одна строка текста \ г \ п другой строки \ г \ Ноф текст

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

одна линия текста

другая линия

с текстом.

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

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

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

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

gsub("\r\n[a-z]","") 

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

Спасибо!

ответ

2

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

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

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

1

Вы должны использовать positive lookahead для этого.

Например:

text = "one line of text \r\n another line \r\nof text," 

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

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

Это похоже на то, что я написал – akrun

+0

спасибо! – nhoff

2

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

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

Смотрите IDEONE demo

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

Pattern:

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

Замена:

  • \1 - нумерованный ссылка назад к содержанию 1-й группы.

Более подробной информации о:

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

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