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

标签 regex perl match

基本上,我有几个文件,每个文件都有几行文本,我有兴趣找到一个特定的 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/

相关文章:

java - 使用正则表达式从字符串中提取姓名和电子邮件地址

python - 如何替换 Y 之间出现的所有 X?

regex - 如何使用正则表达式在 Visual Studio Code 中搜索以仅匹配未注释的代码?

perl - Catalyst:如何声明一个全局子程序

javascript - 匹配字符串中存在的定义标签

PHP - 正则表达式匹配带或不带国家代码的电话号码

perl - 我是否需要在 Windows 上的 Perl 脚本中包含 #!/usr/bin/perl 行?

perl - 无法使用 Perl 中的 LWP::Simple 通过 HTTPS 获取页面

google-sheets - 用于非数值的 Google Sheets "MODE"函数

正则表达式在 sed 中不匹配