2013-06-21 30 views
1

我有變量名以下矢量:正則表達式和正確使用的不是

vn <- c("id", "pid", "wave", "psex", "pdobd", "pdobm", "pdoby", "psat3", 
"ppa21i1", "psd23i19") 

我將不得不拿出一個合適的正則表達式,消除對「PID」的所有第一p的,但不是一個困難。

sub(???, "", vn) ## I tried "^p[^id]?" but to no avail... 

那麼,結果將是這樣的:

c("id", "pid", "wave", "sex", "dobd", "dobm", "doby", "sat3", 
"pa21i1", "sd23i19") 

回答

7

您需要使用zero width assertion(負前瞻)

^p(?!id) 

不要忘了perl的參數設置爲TRUE

+0

太好了,謝謝!將在7分鐘內接受你的答案:-) –

2

略顯笨拙的解決方案:改變pidppid,並正常進行。

sub("^p", "", sub("^pid", "ppid", vn)) 
4

它往往更容易拿出適當的正則表達式,如果你在正面描述你的要求:不是「如果它以'p'開頭,除非它是'pid'」,而是「接受如果它不以'p'開頭,或者它是'pid'」

^([^p].*)|pid$