Середина предложения возврата каретки с регулярным выражением - PullRequest
1 голос
/ 22 января 2020

У меня есть текст следующим образом.

mytext<-c("There is a\nlot of stuff","There is a\nlot of stuff\n","There is a\n lot of stuff","Stuff is everywhere\n\n\n\n around here. Clean it\n up")

Я бы хотел избавиться от \ n в середине предложения с выводом:

There is a lot of stuff
There is a lot of stuff\n
There is a lot of stuff
Stuff is everywhere around here. Clean it up

I пробовал:

gsub("([a-z]\\s*)\n+(\\s*[a-z])", "\\1 \\2", mytext)

но это дает вывод:

[1] "There is a lot of stuff"                              "There is a lot of stuff"                             
[3] "There is a  lot of stuff"                             "Stuff is everywhere\n\n\n  around here. Clean it  up"

Кажется, я не могу избавиться от среднего предложения \ n, когда их кратно , Использование жадного оператора с \ n дает мне странные результаты.

Ответы [ 2 ]

3 голосов
/ 22 января 2020

Вы можете использовать

gsub("(?:\\h*\\R)++(?!\\z)\\h*", " ", mytext, perl=TRUE)

См. Демоверсию regex и демоверсию R онлайн .

Подробнее

  • (?:\\h*\\R)++ - 1 или более вхождений (совпадают собственнически благодаря квантификатору ++, чтобы в шаблоне группы без захвата не могло быть возврата):
    • \\h* - 0 или более горизонтальных пробелов.
    • \\R - любая последовательность разрыва строки
  • (?!\\z) - не в самом конце строки.
  • \\h* - 0 или более горизонтальных пробелов.

Поскольку это шаблон PCRE, требуется perl=TRUE.

0 голосов
/ 22 января 2020

Я думаю, что мы можем использовать отрицательное регулярное выражение.

gsub('\n(?!$)', ' ', mytext, perl = TRUE)

#[1]"There is a lot of stuff"    "There is a lot of stuff\n"                        
#[3]"There is a  lot of stuff"   "Stuff is everywhere     around here. Clean it  up"

Это заменит все \n, за исключением тех, которые находятся в конце строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...