regex - 反转正则表达式

标签 regex perl expression

我想在 Perl 中对 DNA 字符串进行反向补码。这很简单,我有以下表达式。

$revcomp =~ tr/ACGTacgt[]N/TGCAtgca][./;

接着反转字符串。 [] 负责处理不明确的字符。但是,如果我想扩展它以允许更复杂的表达式,这个简单的方案就会失败。例如,C[AG]{7,10}[ACGT]{5,8}ATGC 将生成正则表达式 GCAT{8,5}[ACGT]{01,7} [CT]G 这不是我们想要的(在花括号也被考虑在内之后)。预期的反向补码将是 GCAT[ACGT]{5,8}[CT]{7,10}G。我该怎么办?

最佳答案

为了使带有量词的正则表达式正常工作,您需要按元素而不是按字符反转表达式。通过“逐元素”,我的意思是单个字符或字符类以及以下量词(如果有)必须被视为单个单元。例如,在 C[AG]{7,10}[ACGT]{5,8}ATGC 示例中,有 7 个元素:C-[AG]{7,10}-[ACGT ]{5,8}-A-T-G-C。您需要将其分解为元素列表并反转列表的顺序,而不是将其反转为单个字符串。

预计到达时间:代码

#!/usr/bin/env perl    

use strict;
use warnings;
use 5.010;

my $re = 'C[AG]{7,10}[ACGT]{5,8}ATGC';

$re =~ tr/ACGTacgt/TGCAtgca/;

my @elem = $re =~ /((?:\[.*?\]|.)(?:\{.*?})?)/g;

my $rev = join '', reverse @elem;

say $rev;

输出:

GCAT[TGCA]{5,8}[TC]{7,10}G

关于regex - 反转正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13623614/

相关文章:

perl - 我如何进行模式匹配并继续写入新文件直到另一个模式匹配

c# - 在 C# 中使用动态或表达式

JavaScript 数组表达式

C++ 正则表达式行为

linux - Archive-Tar 的安装位置

Perl DBD::Oracle 模块安装

c# - 表达式。或者,参数 'item' 不在范围内

C# 将参数命名为替换为参数值的字符串

javascript - 正则表达式排除某些标签

javascript - 正则表达式测试新密码