目前我有这样的代码。
Filename <- file.choose()
dirname <- dirname(Filename)
setwd(dirname)
print(dirname)
输出如下:“ Volumes / Lab / Data / Darwin / Patient1 / Cancer / Well1 / P3F5 / PointMutation”
我希望能够创建dirname的子字符串并将其设置为“ P3F5”,以摆脱其他所有问题。我还有其他文件夹,例如P10H11和P1D1。我希望通过正则表达式来实现,因为我希望此代码可复制,并且dirname字符数将不会总是相同,并且由于文件制作不一致(对不起),文件夹与其他文件的变化也很大。我看到的唯一一致的模式是P [number from 1-10] [Letter] [number from 1-12]提取我想要的字符串,我对如何使用正则表达式感到困惑。我尝试过
sub("(P[0-10][:alpha:][0-12])","\\1", dirname)
但是它只是输出相同的名称,所以我认为我做错了。任何帮助表示赞赏。
答案 0 :(得分:2)
您可以使用genArgs :: Gen String
genArgs = do
cs <- listOf1 genCourse
return (unwords cs)
genCourse :: Gen String
genCourse = do
ns <- elements ["1111","1234","4567","1411","1284","4517"]
ls <- listOf1 $ elements ['a'..'z']
return (ls ++ "-" ++ ns)
sub
还有更多示例可供验证
sub('.*(P[0-9]+[A-Z][0-9]+).*','\\1', dirname)
#[1] "P3F5"
如果我们希望目录始终倒数第二,请使用非正则表达式方法x <- 'Volumes/Lab/Data/Darwin/Patient1/Cancer/Well1/P10Q11/PointMutation'
sub('.*(P[0-9]+[A-Z][0-9]+).*','\\1', x)
#[1] "P10Q11"
x <- 'Volumes/Lab/Data/Darwin/Patient1/Cancer/Well1/P6Q2/PointMutation'
sub('.*(P[0-9]+[A-Z][0-9]+).*','\\1', x)
#[1] "P6Q2"
和basename
dirname