我正在尝试运行生物信息学/可视化R工具的脚本。我们实验室的生物信息学家目前正在度假,本实验室中的其他任何人都没有关于编程的任何知识。 我使用的脚本使用指定的文件并使用一些正则表达式进行内部使用和重命名,并且已经编写以适应某些人的命名方案。
我目前的计划是:
geneName secondGeneName generationNumber sampleNumber - alleleNumber _M13r.ab1
所以例如:
CDH 13 F1 1-1_M13r.ab1
CDH 13 F1 1-2_M13r.ab1
CDH 13 F1 2-1_M13r.ab1
...
geneName和secondGeneName分别是三个字母和两个数字
generationNumber是F1或F2
sampleNumber的范围是一到两位数
alleleNumber现在只有一位数
脚本需要两组输出,如下所示:
将SampleNumber - alleleNumber
e.g。1-1
1-2
2-1
...
只是 sampleNumber e.g。
1
1
2
(连字符前面的数字)
我一直在尝试提出一些正则表达式,但无法获得正确的输出
我试过了:gsub("[a-zA-Z0-9 ]*([:digit:]-[:digit:])_.?.ab1","\\1", arrayOfFilenames)
以及只是野蛮地:gsub("[[:alnum:]]*[[:alnum:]]*[[:space:]]([[:alnum:]]*-[[:digit:]])_.*?.ab1", "\\1", arrayOfFilenames)
但没有任何结果正确。
明显的蛮力解决方案只是重命名我拥有的几百个文件以符合原始命名方案,但这可能需要几个小时:(
我很乐意为此提供任何帮助(如果您有时间解释,请简要介绍一下您的解决方案实际上做了什么)。
干杯, 最大
答案 0 :(得分:1)
为什么需要正则表达式?为什么不substr
?
> filename <- 'CDH 13 F1 1-1_M13r.ab1'
> filename
[1] "CDH 13 F1 1-1_M13r.ab1"
> substr(filename,11,13)
[1] "1-1"
> substr(filename,11,11)
[1] "1"
更新
> substr(filename,11,grep('_',strsplit(filename,'')[1][[1]])-1)
[1] "1-1"