2017-04-03 88 views
1

無法找出匹配aa而不是aaa的正則表達式模式。正則表達式尋找aa但不是apa與grep

x <- c("ab", "abc", "abcc", "abccc", "abcccc", "abccccc") 

grep(pattern="c{2,3}", x, value=TRUE, perl=TRUE) 
## [1] "abcc" "abccc" "abcccc" "abccccc" 

grep(pattern="^((?!c{4,}).)*$", x, value=TRUE, perl=TRUE) 
## [1] "ab" "abc" "abcc" "abccc" 

但有什麼圖形,以產生:

grep(pattern=..., x, value=TRUE, perl=TRUE) 
## [1] "abcc" "abccc" 
+1

您的標題似乎不符合您的問題。 – G5W

回答

1

但是,什麼是得1 「ABCC」「abccc模式「

你需要確保該2個或3 c s的不,前面和後面與c

grep(pattern="(^|[^c])c{2,3}([^c]|$)", x, value=TRUE) 

詳細

  • (^|[^c]) - 串的交替組匹配的開始(^錨)或者除了c(具有否定字符類別(括號表示)[^c]
  • c{2,3} -2或3 c小號
  • ([^c]|$) - 交替組匹配字符串($錨)的端部或比c

可選地其他任何字符,使用PCRE正則表達式與lookarounds如果c實際上是一個多字符串的佔位符:

grep(pattern="(?<!c)c{2,3}(?!c)", x, value=TRUE, perl=TRUE) 

R demo

的如果在2或3 c之前有c s,並且(?!c)否定性超前未能通過匹配,則如果在2或3 c之後存在c,則0負向後視將導致匹配失敗。

+1

非常感謝您的詳細答案和解釋! –

2

這應該爲您的測試情況下工作:

^[^c]+c{2,3}$ 
+0

這也適用'[^ ​​c] c {2,3} $' –

相關問題