2017-03-08 43 views
1

我想計算出現在字符串中的字詞數量(如果它被空格包圍或者它在開始或結束處的字符串。R中的正則表達式出現的問題:由空格或字符串的開始/結尾所包圍的匹配詞

我使用this的回答是這樣的:

library(stringi) 

testStr <- c("dutch dutch brown", "brown ", "AAdutch", "dutchAA", "AAbrown", 
      "brownAA", "hello") 
stri_count_regex(testStr, "(^|\\s+)dutch|brown(\\s+|$)") 

它返回3 1 0 1 1 0 0,但我期待3 1 0 0 0 0 0。所以問題在於它也計算了我不想要的"dutchAA""AAbrown"

我對此有點困惑,因爲這個正則表達式在我運行RegExr時運行良好。

+0

也許'stri_count_regex(testStr,「\\ B(荷蘭語|棕色) \\ b「​​)'不確定區別,你可以發佈鏈接到正則表達式tr你使用了 – rawr

回答

2

嘗試使用下面的正則表達式

(?:\b|\s+)(?:dutch|brown)(?:\s+|\b) 

regex demo

[R

library(stringi) 

testStr <- c("dutch dutch brown", "brown ", "AAdutch", "dutchAA", "AAbrown", 
      "brownAA", "hello") 
stri_count_regex(testStr, "(?:\\b|\\s+)(?:dutch|brown)(?:\\s+|\\b)") # 3 1 0 0 0 0 0 
+0

只需要一點附加的上下文:'(?:pattern)'是一個「[非捕獲組](http://stackoverflow.com/a/3513858/143319)」,而'\\ b'是一個單詞邊界 - 它匹配一個單詞的開始或結尾,而不實際匹配該單詞中的任何字符。 –

+0

無論如何,這裏的非捕獲組的動機是什麼? –

相關問題