正则表达式在未被方括号括起时替换子串出现

Ton*_*yal 2 regex r

可以说我有以下字符串向量:

x <- c("this!", "is!", "not my name[!]!", "Understrand[!] Mate!", 
"Because!I[!] said so!")
Run Code Online (Sandbox Code Playgroud)

我需要一种替换惊叹号的方法"!" 使用"!\n"但仅当感叹号未被方括号括起时.所以输出看起来像这样:

"this!\n"
"is!\n"
"not my name[!]!\n"
"Understrand[!] Mate!\n"
"Because!\nI[!] said so!\n"
Run Code Online (Sandbox Code Playgroud)

我一直在玩,只是想不出来.

非常感谢您的帮助.

托尼B.

rcs*_*rcs 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"
Run Code Online (Sandbox Code Playgroud)

编辑: @Mareks测试用例需要一个布尔"或"("|"):

R> gsub("(?<!\\[)\\!|\\!(?!\\])", "!\n", c("aa[!bb", "aa!]bb"), perl=TRUE)
[1] "aa[!\nbb" "aa!\n]bb"
Run Code Online (Sandbox Code Playgroud)