【问题标题】:How to use gsub to remove character from string, with exceptions如何使用 gsub 从字符串中删除字符,但有例外
【发布时间】:2019-08-14 15:23:42
【问题描述】:

我正在从 R 中的字符串中删除所有后跟空格('-')的换行符,期望那些以'en'开头的破折号(与荷兰语语法有关)。使用此示例 (gsub with exception in R) 我已经接近答案,但无法完全弄清楚。

这是一个字符串的例子

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

预期结果:

"word1 longer word2, word3 en- word4" 

【问题讨论】:

    标签: r regex gsub


    【解决方案1】:

    选项可以是负正则表达式环视以匹配- 后跟一个或多个空格 (\\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"
    

    【讨论】:

    • @LSmeets。我认为两者都应该适用于类似的模式。可能会有边缘情况。如果这必须仅限于单词而不是子字符串,请在 en 之前放置一个 \\b
    猜你喜欢
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 2019-03-14
    • 2012-07-31
    • 2021-01-28
    • 1970-01-01
    • 2016-07-15
    • 2016-02-29
    相关资源
    最近更新 更多