我正在尝试为生物信息学/可视化R工具运行脚本。我们的实验室的生物infosician目前正在度假,该实验室中没有其他人对与编程有关的任何事情都有工作知识。我正在使用的脚本获取指定的文件,并使用一些正则用法进行内部用法和重命名,并已编写以适应某人的Elses命名方案。
我当前的方案是按照:
的线条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和第二代名称始终是三个字母和两个数字
enoenthumber是F1或F2
抽样量从一到两个数字
alleLenumber现在只有一个数字
脚本需要这样的两组输出:
Samplenumber - allelenumber 例如1-1
1-2
2-1
...
和Just Samplenumber 例如
1
1
2
(连字符前的数字)
我一直在努力提出一些正则表达式,但无法获得正确的输出
我尝试了: gsub("[a-zA-Z0-9 ]*([:digit:]-[:digit:])_.?.ab1","\1", arrayOfFilenames)
以及残酷的: gsub("[[:alnum:]]*[[:alnum:]]*[[:space:]]([[:alnum:]]*-[[:digit:]])_.*?.ab1", "\1", arrayOfFilenames)
,但没有什么正确的。
明显的蛮力解决方案将只是重命名我必须适合原始命名方案的几百个文件,但这可能需要我几个小时:(
我很高兴为此提供任何帮助(如果您有时间解释,请给我简要概述您的解决方案的实际功能)。
欢呼,最大
为什么您需要正则是正则?为什么不 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"