簡體   English   中英

VB.Net/C#-自定義函數上的拆分字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM