2016-07-12 12 views
0
a="1-B*(0.5+c1)+B**2*(-c2+0.5*c1)+0.5*c3*B**3" 

私は故障にR.に任意の提案を使用して抽出係数は

B, -(0.5+c1), B**2, (-c2+0.5c1), B**3, 0.5*c3 

上記のような文字列をしたいですか?

+1

あなたの出力は多少恣意的です。おそらくあなたはあなたのルールを述べるべきです。 '1-B'の' 1'が消えるのはなぜですか?なぜ '-B'の否定記号が' - (0.5 + c1) 'になるのか?なぜ "要因"の​​いくつかが順序を変えるのですか? –

+0

式はBの多項式です。私は別々にBの次数と対応する係数を個別に抽出したいと思います。 –

+1

正規表現を取り除くためにタイトルを編集することをお勧めします。正規表現は問題を解決する方法の1つで、潜在的な落とし穴がありますが、唯一の方法ではないかもしれません。タイトルはあなたがしようとしているので、 "多項式の係数を抽出する"のようなものでなければなりません – C8H10N4O2

答えて

1

あなたは出力として望んでいない、まさにながら、次は十分に近いですし、問題の解決に役立つかもしれない:

使用する正規表現の
a <- "1-B*(0.5+c1)+B**2*(-c2+0.5*c1)+0.5*c3*B**3" 
b <- gsub("**", "^", a, fixed = TRUE) # Replace "**" with "^" to simply the regex 

ans <- unlist(strsplit(b, '\\([^)]*\\)(*SKIP)(*F)|\\*|\\+', perl = TRUE)) 
print(ans) 
#[1] "1-B"  "(0.5+c1)"  "B^2"  "(-c2+0.5*c1)" "0.5"   "c3"   
#[7] "B^3" 

詳細はhereを見つけることができます。 "^""**"に簡単に変更することができます。gsubを使用してください。

係数に負の符号Bを付ける簡単な方法はありません。

+0

素晴らしいperlの使用のためにupvoted – C8H10N4O2

+0

ありがとう、ありがとう。 –