我正在使用正則表達式來製作一個簡單的數值表達式求解器,現在我正在將多項式分解成它的術語。所以這是我到目前爲止:基於正則表達式的數值表達式求解器
(.*?)([\+-](.*?))+
當負數涉及時,這不起作用。以3 * -2 + 1爲例:我得到的術語是3 *,-2和+1,這顯然是錯誤的。
我想我可以用符號之前身後負的樣子就完事,這樣的標誌前面加*或/被丟棄:
(.*?)((?<![\*/])[\+-](.*?))+
但是,這並不甚至正數
建議工作?
我正在使用正則表達式來製作一個簡單的數值表達式求解器,現在我正在將多項式分解成它的術語。所以這是我到目前爲止:基於正則表達式的數值表達式求解器
(.*?)([\+-](.*?))+
當負數涉及時,這不起作用。以3 * -2 + 1爲例:我得到的術語是3 *,-2和+1,這顯然是錯誤的。
我想我可以用符號之前身後負的樣子就完事,這樣的標誌前面加*或/被丟棄:
(.*?)((?<![\*/])[\+-](.*?))+
但是,這並不甚至正數
建議工作?
希望你沒有花很多時間建立自己的解析器)
我使用此代碼來計算表達式:
class Program
{
public static double Evaluate(string expression)
{
using (var stringReader = new StringReader("<dummy/>"))
{
var navigator = new XPathDocument(stringReader).CreateNavigator();
expression = Regex.Replace(expression, @"([\+\-\*])", " ${1} "); // add some space
expression = expression.Replace("/", " div ").Replace("%", " mod ");
return (double)navigator.Evaluate(string.Format("number({0})", expression));
}
}
static void Main(string[] args)
{
Console.WriteLine(Evaluate("3*-2+1"));
}
}
將輸出:-5
它是基於在XPathNavigator.Evaluate
方法。正則表達式爲輸入添加了一些空格,然後替換了除法和模數符號。
真棒方法,謝謝!但這並不是我正在尋找的。這個求解器將成爲考試的一種論題,所以我不被允許像這樣「作弊」:)但是,你的答案是驚人的! – BlackBear
我不認爲這個正則表達式特別適合解析這樣的表達式。爲什麼不寫你自己的解析器? – Oded
@Oded:我已經這樣做了,但我的一位朋友建議可以使用正則表達式,所以我正在嘗試他的方法;) – BlackBear
http://regex.info/blog/2006-09 -15/247 – Oded