模式检测和空间分割,例外

时间:2015-07-25 17:24:10

标签: regex r grep grepl

目标:检测模式并将其拆分为空格,但有例外。

说明性示例:

data <- c("redcat","big bobcat","bobcat","greencat","pinkcat","north cat")

我想检索cat与另一个词组合的所有实例:

> data[grepl(".[a-z]cat$",data)]
[1] "redcat"     "big bobcat" "bobcat"     "greencat"   "pinkcat"   

找到后,每个匹配需要用空格分割。例外是bobcat,这是另一个级别,需要保持不变。

理想的结果应该是:

[#] "red cat"     "big bobcat" "bobcat"     "green cat"   "pink cat" 

任何想法如何实现这一目标?谢谢。

1 个答案:

答案 0 :(得分:3)

subgsub函数中使用基于负向lookbehind断言的正则表达式。

> data <- c("redcat","big bobcat","bobcat","greencat","pinkcat","north cat")
> gsub("(?<!bob)cat", " cat", data[grepl(".[a-z]cat$",data)], perl=T)
[1] "red cat"    "big bobcat" "bobcat"     "green cat"  "pink cat" 
> gsub("(?<!\\bbob)cat", " cat", data[grepl(".[a-z]cat$",data)], perl=T)
[1] "red cat"    "big bobcat" "bobcat"     "green cat"  "pink cat"

(?<!\\bbob)cat使正则表达式引擎匹配除cat之前的所有bob

直接在data上应用正则表达式。

gsub("(?<!\\bbob)\\Bcat$", " cat", data)