使用grepl替换解析正则表达式

时间:2015-07-25 10:52:22

标签: regex r gsub grepl

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

考虑这个例子:

if NSFileManager.defaultManager().fileExistsAtPath(path) {
    NSLog("The file exists!")
} else {
    NSLog("Better luck next time...")
}

我必须找到所有出现的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的每个元素。我根据堆栈问题20219311尝试了来自包(gsubfn)的 gsub sub gsubfn()

cat

这不是预期的结果:

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

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

3 个答案:

答案 0 :(得分:3)

简单,,,,只需将字符串cat分配给匹配元素即可。这将使用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" 

> 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" 

答案 1 :(得分: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"    

答案 2 :(得分:0)

试试这个:

gsub('(\\w?[0-9].*)','',data)
#[1] "cat "    "cat "    "cat dog" "cat "