private const string NUMERIC_REGEX = "\\W*([0-9]+)(\\W)?([0-9]*)\\W*"
我發現這個正則表達式正在我正在使用的項目中使用。假設從包含貨幣的字符串解析數字。你能推薦一個更好的替代這個正則表達式嗎?
像 「14.22€」=> 14.22
但它似乎並不支持這一點。有人可以幫我調整它以適應特殊的貨幣符號嗎?
作爲替代方案,我發現([\d,.]+)
可以正常工作,但我不確定是否遺漏了任何特殊情況,或者它可能過於通用。
private const string NUMERIC_REGEX = "\\W*([0-9]+)(\\W)?([0-9]*)\\W*"
我發現這個正則表達式正在我正在使用的項目中使用。假設從包含貨幣的字符串解析數字。你能推薦一個更好的替代這個正則表達式嗎?
像 「14.22€」=> 14.22
但它似乎並不支持這一點。有人可以幫我調整它以適應特殊的貨幣符號嗎?
作爲替代方案,我發現([\d,.]+)
可以正常工作,但我不確定是否遺漏了任何特殊情況,或者它可能過於通用。
很好地回答你的問題是使用正則表達式:
(?:\p{Sc} ?)?([\d,.]+)(?: ?\p{Sc})?
這個正則表達式只是您使用的正則表達式的擴展版本。 它所做的是在您的號碼之前和之後檢查可選貨幣符號。
匹配貨幣符號的魔力是\ p {Sc},您可以找到here和一個可選空間。
這個正則表達式檢查非捕獲組中的貨幣符號,這意味着捕獲組1將是您的數字。
欲瞭解更多解釋,只需點擊此答案中的正則表達式鏈接。
以及我不知道你是否想使用現有的類,但你可能想嘗試System.Data.SqlTypes.SqlMoney ...這將確保你的字符串不僅僅是由一些正則表達式解析這可能會失敗......
使用會是這樣:
SqlMoney money = SqlMoney.Parse("12,03 €");
decimal number = money.Value;
也許這樣的事情? :
const string PATTERN = @"^(?'num'\d{0,}[\.|,]{0,1}\d{0,})";
您可以使用此類似:
match = regex.Match(meInput);
string numStr = match.Groups["num"].Value;
double num = double.Parse(numStr);
它並不總是採用這種格式,貨幣符號可以左或右,有或沒有空格 –
嘗試[\ p {Sc} * \ s *([0-9] * \。?[0-9 ] +)\ S * \ p {鈧} *'](http://regexstorm.net/tester?p=%5cp%7bSc%7d*%5cs*%28%5b0-9%5d*%5c.% 3f%5b0-9%5d%2b%29%5cs *%5cp%7bSc%7d *&i = Like +%2214.22 +%e2%82%ac%22)其中'\ p {Sc}'符合貨幣符號。將它用作私人常量字符串NUMERIC_REGEX = @「\ p {Sc} * \ s *([0-9] * \。?[0-9] +)\ s * \ p {Sc} *」;' –