假设$dna = "aaaaccccttttaaaaggggaaaacccccaaaaggggaaaacccctttttttt"
我想在每个aaaa& cccc在你的字符串中 并换上新的一条线。例如,我想要
aaaa
ccccttttaaaaggggaaaa
cccccaaaaggggaaaa
cccctttttttt
我的代码:
if ($DNA =~ /(.*)$match(.*)/) { # $match would be aaaacccc together
my $fragment1 = $1.$pre-match; # pre-match is aaaa
my $fragment2 = $post-match.$2; # post-match is cccc
print"$fragment1\n$fragment2\n";
我想减少每场比赛。
非常重要,只有匹配后才能切断dna。必须有赛前
让我知道我做错了什么。谢谢
答案 0 :(得分:1)
这将做你想要的:
$dna = "aaaaccccttttaaaaggggaaaacccccaaaaggggaaaacccctttttttt";
$dna =~ s/(.*?)(cccc.*?)/$1\n$2/g;
print "$dna\n";
正则表达式会在每cccc
输出:
aaaa
ccccttttaaaaggggaaaa
cccccaaaaggggaaaa
cccctttttttt
答案 1 :(得分:0)
一种解决方案是拆分字符串并将其与"\n"
:
use warnings;
use strict;
use 5.01;
my $dna = "aaaaccccttttaaaaggggaaaacccccaaaaggggaaaacccctttttttt";
my ($split_left, $split_right) = ('aaaa','cccc');
say join "\n", split /(?<=$split_left)(?=$split_right)/, $dna;
匹配后匹配和预匹配是perl中的预定义术语,表示最后一次匹配前后的整个字符串(您可以通过/p
和${^PREMATCH}
使用${^POSTMATCH}
标记访问它们。此外,perl中的变量名称不能包含-
,因为它是运算符,而是使用_
或camelCasing。
答案 2 :(得分:0)
我认为最简单的方法是使用替换添加换行符:
$dna =~ s/aaaacccc/aaaa\ncccc/g;