计算字符串中"("的出现次数

NPH*_*ARD 14 r stringr

我试图在R中的字符串中获取开括号的数量.我正在使用包中的str_count函数stringr

s<- "(hi),(bye),(hi)"
str_count(s,"(")
Run Code Online (Sandbox Code Playgroud)

stri_count_regex出错(string,pattern,opts_regex = attr(pattern,:`正则表达式模式中的嵌套括号错误.(U_REGEX_MISMATCHED_PAREN)

我希望这个例子得到3

seb*_*n-c 10

(是一个特殊的角色.你需要逃脱它:

str_count(s,"\\(")
# [1] 3
Run Code Online (Sandbox Code Playgroud)

或者,鉴于您正在使用stringr,您可以使用以下coll功能:

str_count(s,coll("("))
# [1] 3
Run Code Online (Sandbox Code Playgroud)


lmo*_*lmo 5

您还可以在基础 R 中使用gregexprwith length

sum(gregexpr("(", s, fixed=TRUE)[[1]] > 0)
[1] 3
Run Code Online (Sandbox Code Playgroud)

gregexpr接受一个字符向量并返回一个列表,其中包含每个匹配项的起始位置。我添加了 fixed=TRUE 以匹配文字。length将不起作用,因为gregexpr在未找到子表达式时返回 -1。


如果您的字符向量长度大于 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
Run Code Online (Sandbox Code Playgroud)