【问题标题】:Regular expression string matching any number of trailing characters in R正则表达式字符串匹配 R 中任意数量的尾随字符
【发布时间】:2014-01-28 17:24:02
【问题描述】:

我有一个字符向量,其中每个条目如下所示:

"ABC1:123_CDE/CDE"

我想写一个正则表达式匹配所有和唯一的字符尾随“_”,这样我就可以得到:

ABC1:123

我尝试了"^_$|[CDE/]",但这似乎也选择了初始 C。

我在某处读到,如果您设置perl = TRUE,则可以在 R 中使用lookbehind,但我对 Perl 正则表达式匹配也不是很熟悉。

非常感谢,如果我遗漏了一些明显的东西,我们深表歉意

【问题讨论】:

    标签: regex r


    【解决方案1】:
    sub("_.*", "", "ABC1:123_CDE/CDE")
    #[1] "ABC1:123"
    

    【讨论】:

    • 谢谢,这很好用。你能一步一步地向我解释每个角色在做什么吗?
    • @user3245575 没有太多事情发生 - 它只是匹配下划线,然后是后面的任何内容。如果还不清楚,我建议阅读regex in R
    【解决方案2】:

    您可以使用没有正则表达式的拆分方法,因为您正在寻找文字字符:

    (Perl)

    my @res = split('_', $str, 2);
    print $res[0];
    

    (R语言)

    strsplit("ABC1:123_CDE/CDE", "_", TRUE)[[1]][1]
    

    【讨论】:

    • OP 使用的是 R,而不是 Perl。 (这只是 Perl 兼容的正则表达式)
    • strsplit 命令在 R 中有效。 [[1]][1] 是否告诉 R 只考虑字符串的前半部分?如果我使用 [[1]][2] 似乎只需要字符串的第二部分
    • @user3245575:拆分字符串时,您会获得一个字符串数组。 [1] 用于数组的第一项,[2] 用于第二项,... 使用字符串 A_B_C_D [3] 将返回 C[4] D
    【解决方案3】:

    匹配_之前的任何内容

    .*(?=_)
    

    【讨论】:

    • 不适用于ABC_DEF_GHI 形式的字符串。如果您使用该正则表达式格式,您宁愿想要.*?(?=_)
    • 这不取决于您是否想要在第一次或最后一次出现 '_' 之前的所有字符?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    相关资源
    最近更新 更多