Как динамически удалить или заменить слова с неопределенными числами в строке, используя R, stringr и т. Д.? - PullRequest
0 голосов
/ 31 октября 2019

Допустим, у меня есть данные:

s1 <-'aaa'
s2 <- 'bbb'
s <- 'aaa bbb poefaaapeka 111bbbcde'

s1 и s2 - два слова. Я хочу удалить или заменить с. Таким образом, результат должен быть:

'poefaaapeka 111bbbcde'

Обратите внимание, что я удаляю aaa, только когда это слово. Мне нужно сохранить это, если это в другом слове. В своих данных я не уверен, сколько слов каждый раз и каковы слова. Поэтому я не могу использовать такую ​​операцию, как pattern = 'aaa | bbb'. Кроме того, я должен избавиться от этих слов все вместе, поэтому шаблон должен выглядеть так:

s1|s2|s3...

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

1 Ответ

1 голос
/ 31 октября 2019

Мы можем попытаться создать чередование регулярных выражений, которое будет нацелено на оба условия s1 и s2 для удаления:

s1 <-'aaa'
s2 <- 'bbb'
regex <- paste0("\\b(?:", s1, "|", s2, ")\\b\\s*")
s <- 'aaa bbb poefaaapeka 111bbbcde'
output <- sub("\\s*$", "", gsub(regex, "", s))

s
output

[1] "aaa bbb poefaaapeka 111bbbcde"
[1] "poefaaapeka 111bbbcde"

Здесь используется шаблон регулярного выражения \b(?:aaa|bbb)\b\s*, и обратите внимание, что онтакже обрезает любое количество пробелов справа от термина aaa или bbb. Дополнительный вызов sub требуется, если первый член во входных данных будет aaa или bbb. Это связано с тем, что мы не можем обрезать пробелы с обеих сторон (из-за боязни объединения слов), поэтому мы произвольно решили сделать это только с правой стороны.

...