Целью является синтаксический анализ регулярного выражения и замена совпадающего шаблона.Регулярное выражение, обработанное заменой grepl
Рассмотрим следующий пример:
data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg")
Я должен найти все вхождения cat
и ряд [0-9]
. Для этого:
found <- data[grepl("(^cat.[a-z][0-9])|(^cat.[0-9])",data)]
found
[1] "cat 6kg" "cat g250" "cat 10 kg"
Следующим шагом является замена каждого элемента found
шпагатом cat
. Я попытался GSUB, суб и gsubfn() из пакета (gsubfn) по Stack вопросу 20219311:
gsubfn("((^cat.[a-z][0-9])|(^cat.[0-9]))", "cat",data)
[1] "catkg" "cat50" "cat dog" "cat0 kg"
который НЕ ожидаемый результат:
[#] "cat" "cat" "cat dog" "cat"
I Думаю, мне не хватает смысла. Буду признателен за любую помощь, которую я мог бы получить. Благодарю.
С уважением, Avinash. Просто любопытно, почему не работал gsub? Кроме того, как автоматизировать замену любой строки 'str' (т. Е.' Cat'). Должен ли я использовать paste() ... – remi
@remi gsubfn просто заменяет все совпадающие символы символом 'cat', поэтому он оставляет непревзойденные символы. попробуйте 'gsub ("^cat. [a-z]? [0-9]. * "," cat ", x)'. Это будет соответствовать всем остальным символам, потому что мы добавили '. *' В последний раз. –