[英]VB.Net/C# - Split string on custom function
我正在開發一個自定義數學表達式計算器,但是在解析嵌套條件表達式時遇到了這樣的問題:
IIF("M"="M",(IIF(100 < 50,(IIF(2 > 0.45,2,1)),(IIF(2 > 0.45,4,3)))),(IIF(100 < 46,(IIF(2 > 0.45,2,1)),(IIF(2 >0.45,4,3)))))
我想做的是用逗號分割IIF函數以獲得其參數:
Dim condition = "M"="M"
Dim truePart = (IIF(100 < 50,(IIF([2 > 0.45,2,1)),(IIF(2 >0.45,4,3))))
Dim falsePart = (IIF(100 < 46,(IIF(2 > 0.45,2,1)),(IIF(2 >0.45,4,3)))))
目前,我正在使用Regex來解析單個IIF函數,方法是獲取括號內的內容並將其用逗號分隔:
\((.*?)\)
顯然,這不適用於此類表達式,因為它將在第一個右括號處停止,因此我考慮過使用該表達式來獲取所有其他字符:
\((.*?)\).*
但是現在我不確定如何分割它,因為不再使用逗號。
從理論上得出的答案是,正則表達式無法執行您要求的操作,因為它們“無法計數”。 但是,您需要計數。
實踐表明,.NET正則表達式不是正則表達式,而是堆棧機。 實際上,使用組(?<Group>.*)
您可以將條目添加到該組的堆棧中。 使用(?<-Group>)
,可以從該堆棧中刪除一個條目。 您還可以測試堆棧是否為空。
出於好奇,我嘗試了一下,我相信
[\\(,]([^\\(\\)]|(?<Par>\\()|(?<-Par>\\)))*(?(Par)---|[,\\)])
應該可以工作,其中---
用作轉義序列。 如果您立即了解“正則表達式”,那么我認為您很好。 在所有其他情況下,我建議您手動編寫一個解析器。 否則,測試代碼后5分鍾,您將不會理解代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.