目标:检测模式并将其拆分为空格,但有例外。
说明性示例:
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"
任何想法如何实现这一目标?谢谢。
答案 0 :(得分:3)
在sub
或gsub
函数中使用基于负向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)