我在r:
中的data.frame中有以下内容example <- "Inmuebles24_|.|_Casa_|.|_Renta_|.|_NuevoLeon"
我想在字符串上使用stringr
计数和一些基本的grexpr
函数,但我仍然坚持使用正则表达式。
分隔符显然(并且容易引起混淆):_|.|_
如何用正则表达式表达?
目前试图逃避一切都没有成功:
str_count(string = example, pattern = "[\\_\\|\\.\\|\\_]")
答案 0 :(得分:4)
你的正则表达式不起作用,因为你把它放在一个字符类中(你不需要转义_
,BTW)。请参阅我今天对Regex expression not working with once or none的答案,了解问题的解释(主要是,字符被视为单独的符号,而不是符号序列,所有特殊符号也被视为文字)。
您可以通过两个步骤实现您想要的目标:
gsub
str_count
+ 1获取计数(因为部分数量=字符串内的分隔符数+ 1)R代码:
example <- "_|.|_Inmuebles24_|.|_Casa_|.|_Renta_|.|_NuevoLeon_|.|_"
str_count(string = gsub("^(_[|][.][|]_)+|(_[|][.][|]_)+$", "", example), pattern = "_\\|\\.\\|_") + 1
## => 4
或者,如果你有多个连续的分隔符,你需要另一个中间步骤来&#34;合同&#34;他们变成了1:
example <- "_|.|_Inmuebles24_|.|_Casa_|.|__|.|_Renta_|.|__|.|_NuevoLeon_|.|_"
example <- gsub("((_[|][.][|]_)+)", "_|.|_", example)
str_count(string = gsub("^(_[|][.][|]_)+|(_[|][.][|]_)+$", "", example), pattern = "_\\|\\.\\|_") + 1
## => 4
关于正则表达式的注释:_[|][.][|]_
字面上匹配_|.|_
,因为[...]
字符类中的符号失去了它们的特殊含义。 ((_[|][.][|]_)+)
(2)匹配这些分隔符的1个或多个(+
)序列。 ^(_[|][.][|]_)+|(_[|][.][|]_)+$
模式匹配字符串开头(^
)和结尾($
)的1个或多个分隔符。
答案 1 :(得分:1)
这为您提供了您所提供的特定示例所需的内容:str_count(example, "\\w+")