我正在考慮爲規則引擎項目構建計算解析器工具。將正則表達式分組爲重複模式的不同部分
的計算需要我用string.split(」「)進入值的陣列的字符串的形式,分離值和運算符:
expression = "5 + 6 - 8"
expression.split(' ');
[0]:5
[1]:+
[2]:6
[3]:-
[4]:8
我的代碼使用此陣列來得到答案3 - 目前我只是從左到右進行評估並處理運算符優先級。
我期待擴展計算字符串日期的工作 - 添加或從日期時間減去分鐘,不幸的是我的DateTime有一個空間,所以我得到的結果是:
expression = "12/12/2016 12:00:00 + 30 - 10"
expression.split(' ');
[0]:12/12/2016
[1]:12:00:00
[2]:+
[3]:30
[4]:-
[5]:10
當我真正想要的:
[0]:12/12/2016 12:00:00
[1]:+
[2]:30
[3]:-
[4]:10
我希望通過正則表達式來解決這個問題,所以我也可以驗證串在同一時間,但不幸的是我創造它們的認識是有限的。
任何人都可以有一個正則表達式的例子,或任何關於如何可能做到這一點的建議 - 讓數字和運算符分別存儲在一個數組中?或者這是不可能的正則表達式?我會更好使用String.Substring()來取出數據嗎?
編輯
SLN的解決方案解決了我的問題,我的最終代碼看起來像這樣:
var splitExp = Regex.Split(expression, @"[ ](?:(?=\D)|(?<=\D[ ]))");
其中給出:
expression = "12/12/2016 12:00:00"
splitExp[0] = "12/12/2016 12:00:00"
expression = "12/12/2016 12:00:00 + 30 - 10"
splitExp[0] = "12/12/2016 12:00:00"
splitExp[0] = "+"
splitExp[0] = "30"
splitExp[0] = "-"
splitExp[0] = "10"
這正是我一直在尋找。
好吧,雖然它聽起來太寬泛了,但可以試試'Regex.Split(表達式,@「(?!\ d + :)」)'。此外,請參閱[*是否有一個字符串數學評估器在.NET?*](http://stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net) –
^這。使用負面的lookahead來讓你的正則表達式正確匹配。給定的代碼可能不是OP所需要的,但它可以作爲一個起點,因爲它至少非常接近OP的需求。 – Kadima
另請參閱[*如何在C#*中解析數學表達式](http://stackoverflow.com/questions/2853907/how-to-parse-math-expressions-in-c)。 –