我正在尋找從數學方程字符串中刪除數學上不需要的括號。我需要這樣做,最好是在PostgreSQL 6或VBA中。VBA或PostgreSQL:從數學方程字符串中刪除不需要的括號
例如,我有一個PostgreSQL數據庫以下字符串值:
PercentileRank((([bp47244]+([bp47229][ttm]))/(AvgAeTe([bp48918]))))
,我需要它看起來像這樣(編輯/修正):
PercentileRank(([bp47244]+[bp47229][ttm])/AvgAeTe([bp48918]))
我寧願PostgreSQL中的函數或查詢,但VBA解決方案可以工作。
注意PercentileRank()
和AvgAeTe()
是函數。這[bp47244]
和[bp47229][ttm]
每個代表單個數字/變量,但它們可以以任何方式表示,如[abc123]
和[xyz321][ttm]
。我在那裏看到很多例子,但我沒有看到使用PostgreSQL或VBA的版本,所以我認爲這將是一個很好的問題。
當然,我正在尋找一個可應用於任何方程的通用解決方案。
我現在正在處理這個問題,所以如果我在找到一個答案之前發佈,我會分享;然而,我不擅長正則表達式(不是解決方案必須使用正則表達式)。
謝謝!
更新: 我工作過這樣的邏輯:從這個鏈接
Let L be operator immediately left of the left parenthesis, or nil
Let R be operator immediately right of the right parenthesis, or nil
If L is nil and R is nil:
Redundant
Else:
Scan the unparenthesized operators between the parentheses
Let X be the lowest priority operator
If X has lower priority than L or R:
Not redundant
Else:
Redundant
: Remove redundant parentheses from an arithmetic expression
我將代碼VBA遵循這一邏輯的東西了,並張貼一個答案。
這太辛苦了正則表達式。你需要解析表達式。 –
...另外,我不確定你的例子是否正確。 '/'具有(通常)比'+更高的優先級,所以在本例中,您也刪除了「需要」的括號。 – pozs
@pozs - 對不起。我糾正了它。謝謝!另外,它不一定是正則表達式。 – mountainclimber