Я хочу удалить текст перед первым <br/> - PullRequest
0 голосов
/ 30 марта 2019

Я хочу текст после первого тега
, а затем удалить
в оставшейся части текста.

x=data.frame(text=c("Hi John, hope you are doing well.< br/ >Let me know, when we can meet? < br/ > I have lot to talk about")

Ожидаемый результат:

"Let me know, when we can meet? I have lot to talk about"

Ответы [ 4 ]

4 голосов
/ 30 марта 2019

Обратите внимание, что в общем случае не является идеальным использование регулярных выражений для анализа содержимого HTML.Поскольку ваш контент не является вложенным, здесь он может быть надежным, и мы можем попытаться сделать это с помощью двух вызовов sub:

text <- "Hi John, hope you are doing well.< br/ >Let me know, when we can meet? < br/ > I have lot to talk about"
sub("< br/ >\\s*", "", sub(".*?< br/ >(.*)", "\\1", text))

[1] "Let me know, when we can meet? I have lot to talk about"

Внутренний вызов sub сначала удаляет ведущую часть текставплоть до первого тега < br/ >.Затем второй вызов sub удаляет все оставшиеся теги < br/ >.

2 голосов
/ 30 марта 2019

Ответом, не являющимся регулярным выражением, будет разделение на "< br/ >", сбор всех терминов, кроме первого, и их объединение.

sapply(strsplit(as.character(x$text), "< br/ >"),
          function(x) paste0(x[-1], collapse = ""))
#[1] "Let me know, when we can meet?  I have lot to talk about"
1 голос
/ 30 марта 2019

Мы можем использовать str_extract_all для извлечения всего текста, который следует за шаблоном (< br / >) и не является <

library(stringr)
paste(str_extract_all(x$text, "(?<=< br/ >)[^<]+")[[1]], collapse="")
#[1] "Let me know, when we can meet?  I have lot to talk about"

Или другой вариант - заменить < br/ > на разделитель, читая read.csv/read.table и paste

do.call(paste0, read.csv(text = gsub("< br/ >", ";", x$text, 
  fixed = TRUE), header = FALSE, sep=";", stringsAsFactors = FALSE)[-1])
#[1] "Let me know, when we can meet?  I have lot to talk about"
1 голос
/ 30 марта 2019

Еще один менее эффективный подход с gsub:

res1<-gsub("< br/ >|\\s{1,}(?<=\\n)","",gsub(".*(?=Let)","",x$text,perl=TRUE),perl=TRUE)
gsub("  ","",res1,perl=TRUE)

Это удаляет пробел перед I:

[1] "Let me know,when we can meet?I have lot to talk about
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...