1

タンパク質配列(文字列)のモチーフ(部分文字列)を検索するスクリプトをPerlで書いています。検索するモチーフ配列 (または部分文字列) は hhhDDDssEExD です。

  • hは任意の疎水性アミノ酸です
  • sは任意の小さなアミノ酸です
  • xは任意のアミノ酸
  • h、s、xは別々に複数の値を持つことができます

1 つの変数に複数の値を代入できますか? はいの場合、どうすればよいですか?複数の値のリストを変数に割り当てたい。

4

5 に答える 5

3

正規表現で文字クラスを使用できます。あなたが言及したクラスは次のとおりです。

 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/
于 2009-05-06T13:53:04.700 に答える
3

ある種のパターンマッチングが必要なようです。これは、正規表現を使用して文字列で行うことができます。

于 2009-05-06T12:42:23.903 に答える
2

私はperlの専門家ではないので、おそらくもっと簡単な方法が//ありますが、リストコンテキストの一致演算子「」が必要なようです。一致操作の結果をリストに割り当てると、一致演算子はリスト コンテキストを取得し、括弧で区切られた各サブ式を含むリストを返します。" " フラグを使用してグローバル マッチを指定するとg、各サブ式のすべてのマッチのリストが返されます。例:

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

印刷します

x.x.x

I'm assuming you have a regular expression for each of those 5 types h, D, s, E, and x. You didn't say whether each of these parts is a single character or multiple, so I'm going to assume they can be multiple characters. If so, your solution might be something like this:

$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);
}

I'm sure there is something I've missed, and there are some subtleties of perl that I have overlooked, but this should get you most of the way there. For more information, read up on perl's match operator, and regular expressions.

于 2009-05-06T13:49:28.703 に答える
0

おそらく、配列(またはarrayref)またはパターン(qr //)が必要です。

または多分Quantum::Superpositions

于 2009-05-06T14:51:31.330 に答える
0

私はかなり外れている可能性がありますが、メソッドが組み込まれたオブジェクトを文字列として出力したいようです。

あなたが言及したような文字列から始める場合、文字列を新しいオブジェクトとしてクラスに渡し、誰もが既に提案したように正規表現を使用してチャンクを解析し、それをそのオブジェクトに変数として割り当てることができます。最後に、そのオブジェクトの変数に基づいて文字列を出力させることができます。たとえば、次のようになります。

 $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;

わかりました、そのようなものは最終的にバラバラになり、perl ではなく疑似 php になりました。しかし、私があなたの質問を正しく理解していれば、文字列からすべての情報を取得する方法を探していますが、それをその文字列に関連付けたままにします。それはオブジェクトとクラスです。

于 2009-05-06T14:20:26.243 に答える