取出适合模式的字符串的一部分

时间:2018-08-30 02:07:13

标签: r regex

目前我有这样的代码。

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)

但是它只是输出相同的名称,所以我认为我做错了。任何帮助表示赞赏。

1 个答案:

答案 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