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
上記のような文字列をしたいですか?
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
上記のような文字列をしたいですか?
あなたは出力として望んでいない、まさにながら、次は十分に近いですし、問題の解決に役立つかもしれない:
使用する正規表現の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
を付ける簡単な方法はありません。
素晴らしいperlの使用のためにupvoted – C8H10N4O2
ありがとう、ありがとう。 –
あなたの出力は多少恣意的です。おそらくあなたはあなたのルールを述べるべきです。 '1-B'の' 1'が消えるのはなぜですか?なぜ '-B'の否定記号が' - (0.5 + c1) 'になるのか?なぜ "要因"のいくつかが順序を変えるのですか? –
式はBの多項式です。私は別々にBの次数と対応する係数を個別に抽出したいと思います。 –
正規表現を取り除くためにタイトルを編集することをお勧めします。正規表現は問題を解決する方法の1つで、潜在的な落とし穴がありますが、唯一の方法ではないかもしれません。タイトルはあなたがしようとしているので、 "多項式の係数を抽出する"のようなものでなければなりません – C8H10N4O2