gsub Найти и заменить текст между двумя строками в R - PullRequest
1 голос
/ 16 апреля 2020

Мне нужно использовать функцию gsub в 1000 строках столбца, содержащего текст. В каждой строке я хочу удалить каждое слово, встречающееся между «сказал:» и «нажмите, чтобы развернуть ...», так как они являются просто копией предыдущего твита. Я пытаюсь использовать gsub для выполнения своей задачи

content2<-as.data.frame(gsub(".*said:(.*?)expand.... *", " ", content2$txt,fixed=TRUE),stringsAsFactors = FALSE);

Но он удаляет только «сказал:» и расширяется. content2 - это 100 наблюдений за одним фреймом переменных данных, и я должен выполнить задачу для каждой строки. после ответа Виктора я попытался увидеть, работает ли написанная им строка или нет. я до сих пор вижу сказанное: и нажмите, чтобы развернуть .... в строке 35, поэтому код от wiktor работает только для первой строки, я думаю (которая в любом случае не содержит строк, которые нужно удалить). Я попытался использовать apply безуспешно, чтобы применить это к каждой строке следующим образом, b3, кроме того, что он слишком медленный, он дает мне другую ошибку:

ops<-apply(content2,1,gsub("(said:).*?(click to expand\\.{3})", "\\1 \\2", content2,fixed=TRUE))

Только что просмотрел повторяющийся пост, он не отвечает на мой вопрос, что: Что мне делать, если я хочу заменить все символы в шаблоне, скажем, я хочу заменить все строки между "said:" и "click to expand" для всех строк фрейма данных 100X1. все строки содержат набор строк, и выходные данные должны быть в формате данных размеров 100X1: ops<-gsub("(said:).*?(click to expand\\.{3})", "\\1 \\2", test)

@ WiktorStribiżew спасибо, похоже, это работает только проблема, я также хочу удалить "сказал:" & "нажмите, чтобы развернуть ..." Я сделал следующий воспроизводимый код, который вы можете увидеть: «сказал:» и «нажмите, чтобы развернуть ...» не удаляются.

test<-as.data.frame(c("he said: i wanna be a rockstar click to expand....ok great but how you gonna do it", 
                      "rockstar said: so how you gonna do it click to expand.... we are wanna be a big rockstar, hang out in collest bar vip with movie star"),stringsAsFactors=FALSE)
ops<-lapply(test, gsub, pattern = '(said:).*?(click to expand\\.{3})', replacement ="\\1 \\2", perl=TRUE)
ops<-as.data.frame(ops,stringsAsFactors = FALSE)

1 Ответ

1 голос
/ 16 апреля 2020

Чтобы удалить все подстроки, охватывающие said: до самого левого click to expand... из всех столбцов в кадре данных, вы можете использовать

content2[] <- lapply(content2, gsub, pattern = '(?s)said:.*?click to expand\\.{3}', replacement =" ", perl=TRUE)

Регулярное выражение PCRE (обратите внимание, что perl=TRUE включает механизм PCRE ) соответствует:

  • (?s) - позволяет . сопоставлять символы разрыва строки (по умолчанию это не так)
  • said: - строка (сопоставлять ее как целое слово добавить \b впереди)
  • .*? - любые 0+ символов, как можно меньше
  • click to expand\.{3} - click to expand... подстрока (\.{3} соответствует * 1024) * char трижды).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...