首页 文章

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

提问于
浏览
10

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

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

stri_count_regex中的错误(字符串,模式,opts_regex = attr(模式,:`正则表达式模式中错误地嵌套的括号 . (U_REGEX_MISMATCHED_PAREN)

我希望这个例子得到3

3 回答

  • 7

    ( 是一个特殊字符 . 你需要逃脱它:

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

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

    str_count(s,coll("("))
    [1] 3
    
  • 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
    
  • 2

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

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

相关问题