我正在使用这个正则表达式来查找基因组中的模式.
$string =~ /(?i)a+t?|(?i)t+/g
Run Code Online (Sandbox Code Playgroud)
为了使输出更容易阅读,我想修改它,以便将匹配的任何东西大写为4到7个字符长.它也不应该弄乱$+[0]或$-[0]变量.
我输出的方式是根据'$ + [0]'和'$ + [0]'从较大的字符串文件中获取一个子字符串我不想打印出正在打印的正则表达式匹配大量的校正器,我想让比赛脱颖而出.
如果你真的需要看到我正在研究的代码,你可以在这里得到它
我有两组范围,由[start,stop]值表示.一些范围重叠,这意味着一个范围的开始位于另一个范围的[开始,停止]之间.我想制作一组没有这种重叠的新范围,并且不包括范围内的任何新值.
范围看起来像这样:
@starts @ends
5 108
5 187
44 187
44 229
44 236
64 236
104 236
580 644
632 770
Run Code Online (Sandbox Code Playgroud)
我期望的输出是这样的:
@starts @ends
5 236
580 770
Run Code Online (Sandbox Code Playgroud)
这是因为前七个范围与5 => 236的间隔重叠,后两个与632 => 770的间隔重叠.
这是我试过的代码:
$fix = 0;
foreach (@ends) {
if ($starts[$fix + 1] < $ends[$fix]) {
splice(@ends, $fix, $fix);
splice(@starts, $fix + 1, $fix + 1);
} else {
$fix += 1;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以自己打印出这些值,我只需要帮助合并算法.
我一直在研究处理大量dna的perl程序.它输出然而究竟是什么,我需要花费更长的时间比我想用我NYTprof已经收窄主要问题领域是,增加了我的价值观一起循环.会使用inline :: C进行数学计算,使我的程序更快,还是应该接受速度并继续前进?还有另一种提高速度的方法吗?这是我的程序和它将运行的输入以及已经输入的默认值的可执行文件.
$syb =~ s/(at{3,6})/\U$1/gi;
$syb =~ s/(aat{2,5})/\U$1/gi;
$syb =~ s/(aaat{1,4})/\U$1/gi;
$syb =~ s/(aaaat{0,3})/\U$1/gi;
$syb =~ s/(aaaaat{0,2})/\U$1/gi;
$syb =~ s/(a{4,7})/\U$1/gi;
$syb =~ s/(aaaaaat)/\U$1/gi;
$syb =~ s/(t{4,7})/\U$1/gi;
Run Code Online (Sandbox Code Playgroud)
有什么方法可以将所有这些正则表达式合二为一吗?在同一个字符串上使用这么多正则表达式是不好的做法吗?最终的结果应该是$ syb是aaatcgacgatcgatcaatttcgaaaaaggattttttatgcacgcacggggattaaaa
regexp应该成功的
AAATcgacgatcgatcAATTTcgAAAAAggATTTTTTatgcacgcacggggattAAAA
我的正则表达式的一个问题是它们匹配aaaatttt为两个单独的匹配和输出AAAATTTT.我也需要解决这个问题.
我有一串A的C's T和G存储在$ syb中.我想把字符串的任何部分大写,其中包含一组A,然后是T,只有A或只是T(T后跟A不应该),大写部分可能不短于4且不长于7
perl ×4
regex ×2
algorithm ×1
arrays ×1
inline-c ×1
intervals ×1
merge ×1
optimization ×1
performance ×1