【问题标题】:R- regexp questionR-正则表达式问题
【发布时间】:2011-07-22 09:29:08
【问题描述】:

我需要使用正则表达式重新塑造我的数据框,尤其是这种线

X21_GS04.A.mzdata

必须变成:

GS04.A

我试过了

pluto <- sub('^X[0-90_]+','', my.data.frame$File.Name, perl=TRUE)

它有效;比我试过的

pluto <- sub('.mzdata$','', my.data.frame$File.Name, perl=TRUE)

它也有效。

问题是我不知道如何将两个代码合二为一,我尝试了这样的脚本

pluto <- sub('^X[0-90_]+ | .mzdata$','', my.data.frame$File.Name, perl=TRUE)

但没有任何结果。 谁能告诉我我哪里错了??

最好的 里卡多

【问题讨论】:

    标签: regex r


    【解决方案1】:

    你要的正则表达式是这样的:

    ^X\d+_(.*)\.mzdata$
    

    这将匹配您的整个表达式并捕获您想要保留在组中的部分。您现在可以将其替换为 \1(对捕获组的引用)。

    在 R 中,这将是:

    result <- sub('^X\\d+_(.*)\\.mzdata$', '\\1', my.data.frame$File.Name, perl=TRUE)
    

    【讨论】:

    【解决方案2】:

    删除正则表达式中的空格。同时转义. char:\.,即:

    ^X[0-9]+_|\.mzdata$
    

    【讨论】:

    • 在点之前不需要两个转义字符,即\\.mzdata$in R?
    • @Henrik,为什么? \. 它转义了正则表达式的字符 .。我不知道,需要 char `\` 在 R 中转义。
    • 在我的电脑上,在 R 中都不起作用。您的版本会引发错误(错误:'\.' 是从 "^X[0-9]+_|\. ") 和 \\. 它不会删除 .mzdata 部分。通常,您总是需要在 R 中使用两个 \\ 作为转义字符来转义 \ 本身。
    • @Henrik,我不懂R,你可以问OP他用什么代码。我只提供有效的测试正则表达式。
    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多