2017-02-22 91 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 
相关问题