2014-11-04 49 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