我想在R中的字符串中获取开括号的数量 . 我正在使用 stringr 包中的 str_count 函数
stringr
str_count
s<- "(hi),(bye),(hi)" str_count(s,"(")
stri_count_regex中的错误(字符串,模式,opts_regex = attr(模式,:`正则表达式模式中错误地嵌套的括号 . (U_REGEX_MISMATCHED_PAREN)
我希望这个例子得到3
( 是一个特殊字符 . 你需要逃脱它:
(
> str_count(s,"\\(") [1] 3
或者,假设您正在使用 stringr ,则可以使用 coll 函数:
coll
str_count(s,coll("(")) [1] 3
你也可以在基地R中使用 gregexpr 和 length :
gregexpr
length
sum(gregexpr("(", s, fixed=TRUE)[[1]] > 0) [1] 3
gregexpr 接收一个字符向量并返回一个列表,其中包含每个匹配的起始位置 . 我添加了fixed = TRUE以匹配文字 . length 将无效,因为 gregexpr 在未找到子表达式时返回-1 .
如果您有一个长度大于1的字符向量,则需要将结果提供给 sapply :
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
如果你想在基数R中这样做,你可以分成单个字符的向量并直接计算 "(" (不将其表示为正则表达式):
"("
> s<- "(hi),(bye),(hi)" > chars <- unlist(strsplit(s,"")) > length(chars[chars == "("]) [1] 3
3 回答
(
是一个特殊字符 . 你需要逃脱它:或者,假设您正在使用
stringr
,则可以使用coll
函数:你也可以在基地R中使用
gregexpr
和length
:gregexpr
接收一个字符向量并返回一个列表,其中包含每个匹配的起始位置 . 我添加了fixed = TRUE以匹配文字 .length
将无效,因为gregexpr
在未找到子表达式时返回-1 .如果您有一个长度大于1的字符向量,则需要将结果提供给
sapply
:如果你想在基数R中这样做,你可以分成单个字符的向量并直接计算
"("
(不将其表示为正则表达式):