gpt4 book ai didi

regex - 有没有办法让 "allow"一个 perl RegEx 在尝试匹配时一次忽略 1 个字符?

转载 作者:行者123 更新时间:2023-12-02 07:17:47 26 4
gpt4 key购买 nike

基本上,我有几个文件,每个文件都有几行文本,我有兴趣找到一个特定的 7 个字母序列,并使用 Perl(v5.1) 上的一些基本正则表达式计算它们在每个文件中出现的次数。 24.1).

到目前为止没问题,但“棘手”的部分是,如果这七个字母中的一个与我的模式不匹配,我也想计算它(只要它只是一个)。

我正在寻找的模式:“CCCAGGT”、“CCCAGTT”、“CCCAGCT”和“CCCAGAT”。

我想计算的不匹配文本示例:

line1 - AGGCTCAGGAG'CCCATGT'GGGCGGACCCAT --> Count as 'CCCAGGT'
line2 - CGGCTCAGGAG'CCCGGGT'GGGCGGTCCCAT --> Count as 'CCCAGGT'

我包含一段代码(在底部)以进一步解释我正在搜索的内容以及到目前为止我的想法,但它必须是执行此操作的更好方法。

那么,您知道在使用 =~ m/ 运算符时是否可以“告诉”Perl 我可以容忍序列中有 1 个不匹配吗?或者使用其他功能?

非常感谢您的帮助!

  if ($elements[0] =~ m/CCCAGGT/){
$mutg = $mutg + $elements[1];
}
elsif ($elements[0] =~ m/CCCAGTT/){
$mutt = $mutt + $elements[1];
}
elsif ($elements[0] =~ m/CCCAGAT/){
$muta = $muta + $elements[1];
}
elsif ($elements[0] =~ m/CCCAGCT/){
$mutc = $mutc + $elements[1];
}
else {
if ($elements[0] =~ m/.CCAGGT/){
$mutg = $mutg + $elements[1];
}
elsif ($elements[0] =~ m/.CCAGTT/){
$mutt = $mutt + $elements[1];
}
elsif ($elements[0] =~ m/.CCAGAT/){
$muta = $muta + $elements[1];
}
elsif ($elements[0] =~ m/.CCAGCT/){
$mutc = $mutc + $elements[1];
}
else {
[[AGAIN BUT WITH THE "." IN THE SECOND POSITION AND SO ON]]
}
}

最佳答案

用正则表达式可能是可行的,但它会过于复杂,正则表达式不是为模糊匹配而设计的。你可以考虑Text::Fuzzy .普通界面首先需要以某种方式将您的行转换为可能的序列以供考虑。

use strict;
use warnings;
use Text::Fuzzy;
my $fuzzy = Text::Fuzzy->new('CCCAGGT', max => 1);
my @matches = $fuzzy->nearestv(\@possible);

fuzzy_index 函数也可用于搜索类似于正则表达式的较大文本字符串,但仅返回字符串中最接近的匹配项。

关于regex - 有没有办法让 "allow"一个 perl RegEx 在尝试匹配时一次忽略 1 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56383260/

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