假设我有以下字符串向量:
x <- c("this!", "is!", "not my name[!]!", "Understrand[!] Mate!",
"Because!I[!] said so!")
我需要一种替换惊叹号的方法“!”使用“!\ n”但仅当感叹号未被方括号括起时。所以输出看起来像这样:
"this!\n"
"is!\n"
"not my name[!]!\n"
"Understrand[!] Mate!\n"
"Because!\nI[!] said so!\n"
我一直在玩,只是想不出来。
非常感谢您的任何帮助。
Tony B。
答案 0 :(得分:6)
使用带有负面后瞻(?<!pattern)
和负前瞻(?!pattern)
断言的perl样式正则表达式:
R> gsub("(?<!\\[)\\!(?!\\])", "!\n", x, perl=TRUE)
[1] "this!\n" "is!\n"
[3] "not my name[!]!\n" "Understrand[!] Mate!\n"
[5] "Because!\nI[!] said so!\n"
编辑: @Mareks测试用例需要布尔“或”(“|”):
R> gsub("(?<!\\[)\\!|\\!(?!\\])", "!\n", c("aa[!bb", "aa!]bb"), perl=TRUE)
[1] "aa[!\nbb" "aa!\n]bb"