0

目标是解析正则表达式并替换匹配的模式。

考虑这个例子:

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"

下一步是将 的每个元素替换为foundstring cat。根据堆栈问题 20219311 ,我尝试了包 (gsubfn) 中的gsubsubgsubfn() :

gsubfn("((^cat.[a-z][0-9])|(^cat.[0-9]))", "cat",data)
[1] "catkg"   "cat50"   "cat dog" "cat0 kg"

这不是预期的结果:

[#] "cat" "cat" "cat dog" "cat"

我想我错过了一点。我会很感激我能得到的任何帮助。谢谢。

4

3 回答 3

3

Simple,,,, Just assign the string cat to the match elements. This will replace all the chars present in the element with cat

> data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg") 
> data[grepl("(^cat.[a-z][0-9])|(^cat.[0-9])",data)] <- "cat"
> data
[1] "cat"     "cat"     "cat dog" "cat" 

or

> data <- c("cat 6kg","cat g250", "cat dog","cat 10 kg") 
> data[grepl("^cat.[a-z]?[0-9]",data)] <- "cat"
> data
[1] "cat"     "cat"     "cat dog" "cat" 
于 2015-07-25T10:56:40.243 回答
1

你也可以做

 sub('\\s*dog(*SKIP)(*F)|(?<=cat).*', '', data, perl=TRUE)
 #[1] "cat"     "cat"     "cat dog" "cat"    

或者

 sub('(cat)\\s*([0-9]|[a-z][0-9]).*$', '\\1', data)
 #[1] "cat"     "cat"     "cat dog" "cat"    
于 2015-07-25T11:00:39.717 回答
0

Try this:

gsub('(\\w?[0-9].*)','',data)
#[1] "cat "    "cat "    "cat dog" "cat " 
于 2015-07-25T11:15:55.847 回答