2014-11-04 28 views
2

我有正则表达式的字符串数据,但想排除子R:如何匹配正则表达式,但没有串

dat <- c('long_regex_other_stuff','long_regex_other_random.something') 
(dat[grep('long_regex',dat)]) 
(dat[grep('long_regex.*(?!.*something$)',dat)]) 

第一grep的产量预计

"long_regex_other_stuff"   "long_regex_other_random.something" 

如何获得第二的grep上班?所需的输出是

"long_regex_other_stuff" 

编号:Regular expression to match a line that doesn't contain a word?

回答

2

你需要在正则表达式的字符串something前去掉前面的.*和负先行后添加它,

> dat <- c('long_regex','long_regex.something') 
> (dat[grep('long_regex(?!.*something).*',dat, perl=T)]) 
[1] "long_regex" 
> (dat[grep('long_regex(?!.*\\bsomething\\b).*',dat, perl=T)]) 
[1] "long_regex" 

long_regex(?!.*something)负前瞻在此正则表达式中声明,在子串long_regex之后不存在字符串something

> dat <- c('long_regex_other_stuff','long_regex_other_random.something') 
> (dat[grep('long_regex(?!.*\\bsomething\\b).*',dat, perl=T)]) 
[1] "long_regex_other_stuff" 
+0

让我检查“实际”数据这个答案......这完全不是那么回事,我会改变的例子... – user3969377 2014-11-04 13:42:29

+0

我更新的例子 – user3969377 2014-11-04 13:47:41

+0

你能解释一下原因吗?所以,我们可以提供一个确切的答案。 – 2014-11-04 13:49:40