2017-02-22 92 views
6

我試圖讓在R.字符串開括號的數量我用str_count功能從stringr計算一個字符串的「(」出現的次數

s<- "(hi),(bye),(hi)" 
str_count(s,"(") 

錯誤stri_count_regex(字符串,圖案,opts_regex =屬性(模式, :'在正則表達式模式不正確嵌套的括號 (U_REGEX_MISMATCHED_PAREN)

我希望能拿到3這個例子

+0

逃生吧'str_count(S, 「\\(」)' – Sotos

回答

5

(是一個特殊字符。你需要逃避它:

> str_count(s,"\\(") 
[1] 3 

或者,因爲你使用stringr,您可以使用coll功能:

str_count(s,coll("(")) 
[1] 3 
2

如果你想這樣做的基礎R那麼可以拆分爲單個字符的矢量和直接計數"("(不代表它作爲一個正則表達式):

> s<- "(hi),(bye),(hi)" 
> chars <- unlist(strsplit(s,"")) 
> length(chars[chars == "("]) 
[1] 3 
+2

或者這個'nchar(s) - nchar(gsub('\\(','',s))'爲基礎R – Sotos

+0

@Sotos也可以。 –

2

您也可以使用在基礎R連同length

sum(gregexpr("(", s, fixed=TRUE)[[1]] > 0) 
[1] 3 

gregexpr取入一個字符向量,並返回一個列表與每個匹配的起始位置。爲了匹配文字,我添加了fixed = TRUE。 length將不起作用,因爲gregexpr未找到子表達式時返回-1。


如果您有長度大於一的特徵向量,則需要將結果輸送給sapply

# new example 
s<- c("(hi),(bye),(hi)", "this (that) other", "what") 
sapply((gregexpr("(", s, fixed=TRUE)), function(i) sum(i > 0)) 
[1] 3 1 0 
相關問題