gpt4 book ai didi

regex - 如何在 Perl 的整个匹配输出中突出显示捕获组(例如,用括号括起来)

转载 作者:行者123 更新时间:2023-12-02 06:23:14 24 4
gpt4 key购买 nike

我有以下代码,它成功地将与我的正则表达式匹配的所有字符串打印到控制台中(perl myscript.pl example_text.txt)。

$filename=shift;
open text, $filename or die "error opening $filename\n";

while (my $line = <text>) {
push @matches, $1 while $line
=~ m{
(( [ACGT]{6} )
CTGA
[ACGT]
GAG
( [ACGT]{3,6} )
[ACGT]{2,100}
(??{ $3 =~ tr/ACGT/TGCA/r })
( CGAAA[ACGT] ))
}xgi;
}

print "$_\n" for @matches;

(这只是我的正则表达式的简化版本,我的捕获组要复杂得多,并且没有固定长度。)

我的sample_text可以下载here .

我希望输出保持原样(每行一个匹配项),但我想要与第一个 ( [ACGT]{6} ) 匹配的子字符串last ( CGAAA[ACGT] ) 在我的正则表达式中捕获组,以便在控制台中打印整个匹配项时在它们周围加上括号。

举个例子,当我在附加的示例文件 (sample_text) 上运行上面的整个脚本时,我得到的匹配结果之一是:

TTTATGCTGATGAGAAAAAACATAAGAAAACGTATAATTTTTTCTAAAAAAGGAAAAAAGACCGAAATTTTAAGCTGTTTTTCGAAAA

我想看到这样的输出:

(TTTATG)CTGATGAGAAAAAACATAAGAAAACGTATAATTTTTTCTAAAAAAGGAAAAAAGACCGAAATTTTAAGCTGTTTTT(CGAAAA)

最佳答案

push @matches, "($1)$2($4)"
while
$line =~ m{
( [ACGT]{6} )
( CTGA
[ACGT]
GAG
( [ACGT]{3,6} )
[ACGT]{2,100}
(??{ $3 =~ tr/ACGT/TGCA/r })
)
( CGAAA [ACGT] )
}xgi;

使用命名捕获:

#push @matches, sprintf "(%s)%s(%s)", @+{qw( pre main suf )}
push @matches, "($+{pre})$+{main}($+{suf})"
while
$line =~ m{
(?<pre> [ACGT]{6} )
(?<main> CTGA
[ACGT]
GAG
( [ACGT]{3,6} )
[ACGT]{2,100}
(??{ $^N =~ tr/ACGT/TGCA/r })
)
(?<suf> CGAAA [ACGT] )
}xgi;

关于regex - 如何在 Perl 的整个匹配输出中突出显示捕获组(例如,用括号括起来),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48508926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com