private const string NUMERIC_REGEX = "\\W*([0-9]+)(\\W)?([0-9]*)\\W*"
我发现这个正则表达式正用于我正在进行的项目中。它假设从包含货币的字符串中解析数字。
喜欢“14.22€”=> 14.22
但似乎并不支持这一点。有人可以帮助我调整它以使用特殊货币符号吗?
作为替代方案,我发现这个([\d,.]+)
能够满足我的需求,但我不确定我是否错过了任何特殊情况,或者它太过通用了。
答案 0 :(得分:2)
我不知道你是否想要使用现有的类,但是你可能想尝试使用System.Data.SqlTypes.SqlMoney ...这将确保你的字符串不仅仅被一些正则表达式解析了可能会失败...
使用就像:
SqlMoney money = SqlMoney.Parse("12,03 €");
decimal number = money.Value;
答案 1 :(得分:2)
您的问题的一个好答案是使用正则表达式:
(?:\p{Sc} ?)?([\d,.]+)(?: ?\p{Sc})?
此正则表达式只是您正在使用的正则表达式的扩展版本。 它的作用是在你的号码之前和之后检查一个可选的货币符号。
匹配货币符号的神奇之处是\ p {Sc},因为您可以找到here和可选空格。
此正则表达式检查非捕获组中的货币符号,这意味着捕获组1将是您的编号。
有关详细说明,请单击此答案中的Regex Proof链接。
答案 2 :(得分:0)
也许是这样的? :
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);