【问题标题】:remove all characters up to a certain character删除直到某个字符的所有字符
【发布时间】:2017-09-28 03:04:18
【问题描述】:

我有一列包含诸如

之类的字符串

"a1.p.e0.l""k.r.a1.f.t.i0"

我正在尝试删除直到第一个元音的所有内容。所以对于上面的第一个词,什么都不会被删除。对于第二个单词,将返回“a1.f.t.i0”。

我正在玩 gsub,但我不知道如何让它从某个集合中删除任何元音(我有 v<-c('a', 'e', 'i', 'o', 'u'),所以我需要能够删除其中一个字符串之前的所有字符在这个元音集中。有什么建议吗??

【问题讨论】:

    标签: r regex string list gsub


    【解决方案1】:

    您可以匹配和删除^[^aeiou]*

    s <- c("a1.p.e0.l", "k.r.a1.f.t.i0")
    sub("^[^aeiou]*", "", s, ignore.case = T)      # ignore.case depends on if you want to match 
                                                   # capital vowel
    # [1] "a1.p.e0.l" "a1.f.t.i0"
    

    • ^ 匹配字符串的开头;
    • [^aeiou]* 匹配零个或多个非元音字符;

    从你的字符集开始:

    v <- c('a', 'e', 'i', 'o', 'u')
    s <- c("a1.p.e0.l", "k.r.a1.f.t.i0")
    
    pattern = sprintf("^[^%s]*", paste(v, collapse = ''))
    sub(pattern, "", s, ignore.case = T)
    # [1] "a1.p.e0.l" "a1.f.t.i0"
    

    【讨论】:

    • 可能需要澄清sprintf("^[^%s]*", paste(v, collapse = '')) 中的's' 与上面定义的变量s 不同。相反,它是sprintf() 的转换规范“%s”。见?sprintf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多