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
?
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
的負號附加到係數。
不錯的一個,upvoted使用perl – C8H10N4O2
非常感謝。 –
你的輸出看起來有點武斷。也許你應該說明你的規則。爲什麼'1-B'中的'1'消失?爲什麼'-B'的負號到括號變爲' - (0.5 + c1)'?爲什麼一些「因素」會改變秩序? –
表達式是B的一個多項式,我想分別提取B的階數和相應的係數 –
我建議你編輯標題以擺脫正則表達式。正則表達式是解決問題的一種方法(有一些潛在的缺陷),但可能不是唯一的方法。標題應該像「提取多項式表達式係數」這樣的東西,因爲這就是你正在嘗試做的 – C8H10N4O2