2016-12-07 6 views
4

に代わるものとして、配列のアイテムを使用します。は、私はこのような数学関数を含む文字列を持っているMATLABのregExprの

sin(x[1]) + cos(x[2]) + tan(x[3]) + x[1] 

今私はregExprのを使ってアルファベットの文字で各x [番号]を交換したいです。

:これは単に「A」を持つすべてのx [番号]を置き換える私の最初のregExprのある

alphabet = ('a':'z') 

:だから私はこのようなアルファベットの配列を定義し

sin(a) + cos(b) + tan(c) + a 

:結果は次のようになります。私はそれが正しい文字で置き換える作ってみました何

regexprep(functionString,'x\[(\d+)\]','${alphabet(1)}'); 

、私はこれは正しいアルファベットインデックスでアルファベット(1)が、動的にアイテムを使用しないだろうと思ったの代わりに1 $ 1を使用しています。

regexprep(functionString,'x\[(\d+)\]','${alphabet($1)}'); 

代わりに、インデックスが行列の寸法を超えているというエラーが発生しています。

誰かが私が間違っていることを知っていますか?正しい手紙をどうすれば入手できますか? ありがとうございます!

答えて

3

Matlabは$1の入力をテキストとして使用します。 int32('1') = 49以降、エラーIndex exceeds matrix dimensionsが発生します。

、あなたの問題を解決するstr2numを使用するには:

regexprep(functionString,'x\[(\d+)\]','${alphabet(str2num($1))}') 
+0

それは動作します!しかし、なぜ私は考えていない。あなたは何を説明できますか(49:74)?ありがとうございました! – selmaohneh

+0

追加された説明 – yuval

0

regexprep(functionString,'x\[(\d+)\]','${alphabet($0)}');を試しましたか?

ここからわかります:https://de.mathworks.com/help/matlab/ref/regexprep.html正規表現は0から始まるので、最初のものは$ 0でなければなりません。

+0

はい。同じエラー。 – selmaohneh

+0

ちょうど試しました:$ 0は一致した全体のx [2]を返します。 $ 1は2を返します。したがって、アルファベット($ 1)を使用すると、より多くのロジックが得られます。しかし、まだエラーがあります。 – selmaohneh

1

あなたが興味を持っている場合は、あなたが実際にalphabet変数を作成することなく、これを行うことができます。 'a'から始まるあなたのASCII文字を与える

regexprep(functionString,'x\[(\d+)\]','${char($1+48)}') 

があなたのインデックス$1に48を追加し、charに変換:ここでは、方法です。

関連する問題