2

演算子の観点から力を表現する非常に大きな式があり、関数**を使用するコードに変換する必要がありpowます。つまり、a*b**N*dbya*pow(b,N)のような用語を見つけて置き換えるための正規表現を探します。ここNで、 は整数です。

ここで、ab、およびは、および 整数をc含む用語であり、は存在しない場合があります。xy*-+()a**d

私はどういうわけか、これらすべての文字をエスケープすることに固執しています。手動の後処理に投資する準備ができているので、正規表現は堅牢である必要がありますが、必ずしも完全ではありません。

編集:ケントが指摘したように、bネストされたブラケットが含まれていると問題があります。私の場合、ネストされたブラケットはありません。条件はすべて、以下のコメントに示されている形式です。

4

3 に答える 3

1

この問題は一般に正規表現では解決できないようです。これは、何らかの方法で括弧のバランスを取る必要があるためです。これはパーサーのタスクです。

このようなものは、括弧がない場合に機能します: %s/\(x\|y\|\d\+\)\*\*\(\d\+\)/pow(\1,\2)/gc.

用語を囲む括弧が 1 組しかない場合は、次のようになります。 %s/\(([xy0-9+-\* ]\+)\|x\|y\|\d\+\)\*\*\(\d\+\)/pow(\1,\2)/gc

ところで、この質問を少し思い出させます=)

于 2013-03-04T10:20:56.683 に答える
1

私が正しく理解している場合は、正規表現のグループ化を使用して、抽出するカテゴリを分離してみてください。

したがって、これは正規表現です:

(a\*)(b)\*{2}(N)\*d

次のようにグループを抽出できます。

\1pow(\2,\3)

参照グループは次のとおりです。

\1 = (a\*)
\2 = (b)
\3 = (N)
于 2013-03-04T09:59:35.007 に答える
1

これを試すことができます

正規表現:(\([0-9xy*-]+\)|[0-9xy]+)\*\*([0-9]+)

置換:pow($1,$2)またはpow(\1,\2)

于 2013-03-04T09:59:35.893 に答える