具有特殊字符的特定模式的正则表达式

时间:2016-01-13 22:56:04

标签: regex r

我在r:

中的data.frame中有以下内容
example <- "Inmuebles24_|.|_Casa_|.|_Renta_|.|_NuevoLeon"

我想在字符串上使用stringr计数和一些基本的grexpr函数,但我仍然坚持使用正则表达式。

分隔符显然(并且容易引起混淆):_|.|_

如何用正则表达式表达?

目前试图逃避一切都没有成功:

str_count(string = example, pattern = "[\\_\\|\\.\\|\\_]")

2 个答案:

答案 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+")