Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 大小等于上一个块的正则表达式搜索块_Regex_Fastq - Fatal编程技术网

Regex 大小等于上一个块的正则表达式搜索块

Regex 大小等于上一个块的正则表达式搜索块,regex,fastq,Regex,Fastq,我想用正则表达式逐块解析FASTQ文件。 FASTQ文件如下所示: @EAS54_6_R1_2_1_413_324 // seqname CCCTTCTTGTCTTCAGCGTTTCTCC // seq + // seqname #2 ;;3;;;;;;;;;;;;7;;;;;;;88 // qual @EAS54_6_R1_2_1_540_792 // seqname TTGGCAGGCCAAGGCCGATGGATCA

我想用正则表达式逐块解析FASTQ文件。 FASTQ文件如下所示:

@EAS54_6_R1_2_1_413_324     // seqname
CCCTTCTTGTCTTCAGCGTTTCTCC   // seq
+                           // seqname #2
;;3;;;;;;;;;;;;7;;;;;;;88   // qual
@EAS54_6_R1_2_1_540_792     // seqname
TTGGCAGGCCAAGGCCGATGGATCA   // seq
+                           // seqname #2
;;;;;;;;;;;7;;;;;-;;;3;83   // qual
@EAS54_6_R1_2_1_443_348     // seqname
GTTGCTTCTGGCGTGGGTGGGGGGG   // seq
+EAS54_6_R1_2_1_443_348     // seqname #2
;;;;;;;;;;;9;7;;.7;393333   // qual
及其格式:

<fastq>     :=  <block>+
<block>     :=  @<seqname>\n<seq>\n+[<seqname>]\n<qual>\n
<seqname>   :=  [A-Za-z0-9_.:-]+
<seq>       :=  [A-Za-z\n\.~]+
<qual>      :=  [!-~\n]+

更新:我们无法搜索
@
令牌,因为它可能出现在
块中

这里有一个正则表达式来解析它:

(.*?(?=\n@[A-Z]|$)) //single-line,global
通过
(?=\n@[A-Z]|$)
向前看,我们强制
*?
在以“@”开头的新行后面加上(大写)字母或输入结尾之前获取所有内容


不幸的是,不可能将{n}b{n}与正则表达式匹配。它需要上下文无关的语法


(相反,只需匹配name、seq和+,然后获取seq匹配,然后从剩余字符串中读取接下来的n个字符以获得qual。)

Regex不太擅长通常属于编程/脚本语言的逻辑。编程语言?@ninjalj POSIX Regex或ECMASsince FASTQ格式正好是每个块四行的顺序,为什么不按顺序一次读四行,准确地知道哪一行是name、seq、+、和qual呢?如果已将所有数据作为字符串,请按“\n”将其拆分为一个数组,然后将项目0-3、4-7、8-11等。。。是name,seq,+,qual块。@webb它不是:)正如您在格式
\n
中看到的那样,在
seq
qual
字段中允许使用符号。如果
qual
字段的第一个字符是
@
啊,则符号不能正常工作。但是字母不能在qual right中显示,所以请修改“向前看”以查看@+字母?(更新)
之间的任何符号
~
(包括它们本身)+
\n
可能出现在qual中,正如它的正则表达式中所提到的:
[!-~\n@]+
是否seqname总是23个字符,qual/seq 25?否,
[…]+
意味着可以有1到无限个字符。但是
qual
length应该与
seq
length相同,我正在试图找出正则表达式中有没有任何技巧可以增加这种条件。你们注意到这可能是一个有疑问的短语吗?这不是一个拖拉。一个证明不可能的回答是可以接受的。@LibertyPaul,请接受我对错误指控的道歉。
(.*?(?=\n@[A-Z]|$)) //single-line,global