我正在 Perl 中编写一个脚本,用于搜索蛋白质序列(字符串)中的基序(子字符串)。要搜索的基序序列(或子串)是 hhhDDDssEExD,其中:

  • H 是任何疏水性氨基酸
  • s 是任何小氨基酸
  • X 是任意氨基酸
  • 小时,秒,x 可以有 超过一个 分别值

可以为一个变量分配多个值吗?如果是,我该怎么做?我想将多个值的列表分配给一个变量。

有帮助吗?

解决方案

我不是 perl 方面的专家,因此很可能有一种更快的方法,但它似乎是匹配运算符“//“在列表上下文中就是您所需要的。当您将匹配操作的结果分配给列表时,匹配运算符采用列表上下文并返回一个列表,其中包含每个括号分隔的子表达式。如果您使用“指定全局匹配g" 标志,它将返回每个子表达式的所有匹配项的列表。例子:

# print a list of each match for "x" in "xxx"
@aList = ("xxx" =~ /(x)/g);
print(join(".", @aList));

会打印出来

x.x.x

我假设您对这 5 种类型都有一个正则表达式 h, D, s, E, , 和 x. 。您没有说这些部分中的每一个是单个字符还是多个字符,所以我假设它们可以是多个字符。如果是这样,您的解决方案可能是这样的:

$h = ""; # Insert regex to match "h"
$D = ""; # Insert regex to match "D"
$s = ""; # Insert regex to match "s"
$E = ""; # Insert regex to match "E"
$x = ""; # Insert regex to match "x"

$sequenceRE = "($h){3}($D){3}($s){2}($E){2}($x)($D)"

if ($line =~ /$sequenceRE/) {
    $hPart = $1;
    $sPart = $3;
    $xPart = $5;

    @hValues = ($hPart =~ /($h)/g);
    @sValues = ($sPart =~ /($s)/g);
    @xValues = ($xPart =~ /($x)/g);
}

我确信我错过了一些东西,并且我忽略了 Perl 的一些微妙之处,但这应该能让您大致了解这一点。欲了解更多信息,请阅读 Perl 的 匹配运算符, , 和 常用表达.

其他提示

看来您想要某种模式匹配。这可以通过使用正则表达式的字符串来完成。

您可以在正则表达式中使用字符类。您提到的课程是:

 h -> [VLIM]
 s -> [AG]
 x -> [A-IK-NP-TV-Z]

最后一个的意思是“A到I,K到N,P到T,V到Z”。

您的示例的正则表达式为:

/[VLIM]{3}D{3}[AG]{2}E{2}[A-IK-NP-TV-Z]D/

Perl 正则表达式 就是你需要的

我可能有点偏离,但听起来你想要一个带有内置方法的对象作为字符串输出。

如果您从一个字符串开始,就像您提到的那样,您可以将该字符串作为新对象传递给类,使用正则表达式(就像每个人都建议的那样)解析出块,然后将其作为变量分配给该对象。最后,您可以让它根据该对象的变量输出一个字符串,例如:

 $string = "COHOCOHOCOHOCOHOCOHOC";
 $sugar = new Organic($string);

 Class Organic {
 $chem;
       function __construct($chem) {
           $hydro_find = "OHO";
           $carb_find = "C";
           $this-> hydro = preg_find ($hydro_find, $chem);
           $this -> carb = preg_find ($carb_find, $chem);

        function __TO_STRING() {
           return $this->carb."="$this->hydro;
        }
   }

 echo $sugar;

好吧,最终这种方式崩溃了,它是伪 php,而不是 perl。但如果我正确理解你的问题,你正在寻找一种方法来从字符串中获取所有信息,但将其与该字符串绑定在一起。那将是对象和类。

您可能需要一个数组(或 arrayref)或一个模式(qr//)。

或者可能 量子::叠加.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top