R-regexp问题

Ric*_*rdo 6 regex r

我需要使用regexp重新塑造我的数据框,特别是这种线

X21_GS04.A.mzdata
Run Code Online (Sandbox Code Playgroud)

必须成为:

GS04.A
Run Code Online (Sandbox Code Playgroud)

我试过

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

它有效; 比我试过

pluto <- sub('.mzdata$','', my.data.frame$File.Name, perl=TRUE)
Run Code Online (Sandbox Code Playgroud)

它也有效.

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

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

但没有任何意义.有人能跟我说错吗?

最好的Riccardo

Kon*_*lph 9

你所追求的正则表达式是这样的:

^X\d+_(.*)\.mzdata$
Run Code Online (Sandbox Code Playgroud)

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

在R中,这将是:

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


Kir*_*huk 2

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

^X[0-9]+_|\.mzdata$
Run Code Online (Sandbox Code Playgroud)