我是NextFlow/Groovy/Java的新手,在处理一个简单的正则表达式任务时遇到了一些困难。
我正在尝试修改一些文件对的标签。我的理解是,fromFilePairs
返回的数据结构形式如下:
[
[common_prefix, [file1, file2]],
[common_prefix, [file3, file4]]
]
我进一步认为:
.name
方法时,将给出名称,我在上面将其标记为common_prefix
fromfilepairs
一起使用的闭包返回的值设置文件对的名称。fromfilepairs
一起使用的闭包中的it
的值是文件对列表中的单个项。但是,我在以下几个方面尝试了很多变体都没有成功:
params.fastq = "$baseDir/data/fastqs/*_{1,2}_*.fq.gz"
Channel
.fromFilePairs(params.fastq, checkIfExists:true) {
file ->
// println file.name // returned the common file prefix as I expected
mt = file.name =~ /(common)_(prefix)/
// println mt
// # java.util.regex.Matcher[pattern=(common)_(prefix) region=0,47 lastmatch=]
// match objects appear empty despite testing with regexs I know to work correctly including simple stuff like (.*) to rule out issues with my regex
// println mt.group(0) // #No match found
mt.group(0) // or a composition like mt.group(0) + "-" + mt.group(1)
}
.view()
我还尝试了使用replaceAll
方法的一些变体。
我已经查阅了nextflow,groovy和Java的文档,但我仍然不知道我缺少了什么。我认为这是一些愚蠢的语法问题,或者是对数据结构的误解,但我已经厌倦了对它大加指责,当它对更懂这种语言的人来说很明显的时候--我非常感谢任何能够启发我如何工作的人。
可以向fromfilepairs运算符提供闭包来实现自定义文件对分组策略。它接受一个文件并应该返回分组键。文档中的示例只是按文件扩展名对文件进行分组:
Channel
.fromFilePairs('/some/data/*', size: -1) { file -> file.extension }
.view { ext, files -> "Files with the extension $ext are $files" }
如果您想要做的只是更改一些文件对的标签,那么这是不必要的。您可以为此使用map运算符。fromFilePairs操作发出元组,其中第一个元素是匹配对的“分组键”,第二个元素是“文件列表”(按词典排序):
Channel
.fromFilePairs(params.fastq, checkIfExists:true) \
.map { group_key, files ->
tuple( group_key.replaceAll(/common_prefix/, ""), files )
} \
.view()
闭包本身是相当灵活的,可以实现所需功能来让闭包运行而不用类型标注(原文:Closures are inherently flexible and will do what the functionality requires to make the closure work without annotation)。这允许变量捕获灵活地适应使用 情况,有时是移动(moving)有时是借用(borro
null 我得到以下错误: 为什么会这样?
此regex:使用多个组匹配表达式。regex的要点是它捕获两个成对的模式,其中regex的第一部分必须跟在regex的第二部分后面。 如何提取这两个组中的每一个? 这里的关键是regex匹配两次,每次包含2个组。我希望每个匹配都有一个它自己的列表,这个列表包含2个元素,每个组一个。
我很难匹配和捕捉这些。目前我正在尝试以下变体: 我认为sed有一些regex或捕获组行为我不理解
我正在试图理解这个代码块。在第一个中,我们在表达式中寻找的是什么? 我的理解是,它是任何一个字符(0或多个*),后面跟0到9之间的任何一个数字(一个或多个+),后面跟任何一个字符(0或多个*)。 执行此操作时,结果为: 使用抓取群的好处是什么?