如何使用 gsub 从字符串中删除字符,但有例外

How to use gsub to remove character from string, with exceptions

我正在从 R 中的字符串中删除所有换行破折号后跟 space('- '),除了前面有 'en' 的那些(与荷兰语语法有关) ).使用此示例 () 我接近答案了,但就是无法完全弄明白。

这是一个字符串的例子

string <- "word1 long- er word2, word3 en- word4"

预期结果:

"word1 longer word2, word3 en- word4" 

一个选项可以是否定的正则表达式环视以匹配 - 后跟一个或多个空格 (\s+) 而不是 (!) 前面有字符 'en'

gsub("(?<!en)(-\s+)", "", string, perl = TRUE)
#[1] "word1 longer word2, word3 en- word4"

或使用 SKIP/FAIL 使匹配的模式在模式前面有 'en'

时失败
gsub("(en-\s+)(*SKIP)(*FAIL)|-\s+", "", string, perl = TRUE)
#[1] "word1 longer word2, word3 en- word4"