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

时间:2017-02-22 14:37:20

标签: r stringr

我正在尝试在R中的字符串中获取左括号的数量。我正在使用str_count包中的stringr函数

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

stri_count_regex出错(string,pattern,opts_regex = attr(pattern,       :`在regexp模式中错误地嵌套括号。       (U_REGEX_MISMATCHED_PAREN)

我希望这个例子得到3

3 个答案:

答案 0 :(得分:10)

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

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

或者,假设您使用stringr,则可以使用coll函数:

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

答案 1 :(得分:3)

如果你想在基础R中做到这一点,你可以分成单个字符的向量并直接计算"("(不将其表示为正则表达式):

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

答案 2 :(得分:3)

你也可以在基础R中使用gregexprlength

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

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