2016-07-12 112 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

我建議你編輯標題以擺脫正則表達式。正則表達式是解決問題的一種方法(有一些潛在的缺陷),但可能不是唯一的方法。標題應該像「提取多項式表達式係數」這樣的東西,因爲這就是你正在嘗試做的 – 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

不錯的一個,upvoted使用perl – C8H10N4O2

+0

非常感謝。 –