C# 你能推荐一个更好的替代这个正则表达式吗?
我发现这个正则表达式正在我的一个项目中使用。假设它从包含货币的字符串中解析数字 比如“14.22欧元”=>14.22欧元 但它似乎并不支持这一点。有人能帮我调整它,使之也适用于特殊的货币符号吗C# 你能推荐一个更好的替代这个正则表达式吗?,c#,regex,C#,Regex,我发现这个正则表达式正在我的一个项目中使用。假设它从包含货币的字符串中解析数字 比如“14.22欧元”=>14.22欧元 但它似乎并不支持这一点。有人能帮我调整它,使之也适用于特殊的货币符号吗 作为一种替代方法,我发现这个([\d,.]+)可以满足我的需要,但我不确定是否遗漏了任何特殊情况,或者它太通用了。我不知道您是否希望使用现有类,但您可能希望尝试System.Data.SqlTypes.SqlMoney。。。这将确保您的字符串不只是被某些可能失败的regexp解析 用途如下: privat
作为一种替代方法,我发现这个
([\d,.]+)
可以满足我的需要,但我不确定是否遗漏了任何特殊情况,或者它太通用了。我不知道您是否希望使用现有类,但您可能希望尝试System.Data.SqlTypes.SqlMoney。。。这将确保您的字符串不只是被某些可能失败的regexp解析
用途如下:
private const string NUMERIC_REGEX = "\\W*([0-9]+)(\\W)?([0-9]*)\\W*"
我不知道您是否想使用现有的类,但您可能想尝试System.Data.SqlTypes.SqlMoney。。。这将确保您的字符串不只是被某些可能失败的regexp解析 用途如下:
private const string NUMERIC_REGEX = "\\W*([0-9]+)(\\W)?([0-9]*)\\W*"
也许是这样的
SqlMoney money = SqlMoney.Parse("12,03 €");
decimal number = money.Value;
您可以这样使用:
const string PATTERN = @"^(?'num'\d{0,}[\.|,]{0,1}\d{0,})";
也许是这样的
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}和一个可选的空格
此正则表达式检查非捕获组中的货币符号,这意味着捕获组1将是您的编号
有关更多解释,请单击此答案中的正则表达式证明链接。您的问题的一个好答案是使用正则表达式:
match = regex.Match(meInput);
string numStr = match.Groups["num"].Value;
double num = double.Parse(numStr);
这个正则表达式只是您使用的正则表达式的扩展版本。
它所做的是在您的号码前后检查可选的货币符号
匹配货币符号的神奇之处在于\p{Sc}和一个可选的空格
此正则表达式检查非捕获组中的货币符号,这意味着捕获组1将是您的编号
有关详细说明,请单击此答案中的Regex-Proof链接。货币符号并不总是采用这种格式,可以向左或向右移动,也可以不使用空格,其中
\p{Sc}
与货币符号匹配。将其用作private const string NUMERIC_REGEX=@“\p{Sc}*\s*([0-9]*\.?[0-9]+)\s*\p{Sc}*”
它并不总是采用这种格式,货币符号可以向左或向右移动,可以使用空格,也可以不使用空格,其中\p{Sc}
与货币符号匹配。将其用作private const string NUMERIC_REGEX=@“\p{Sc}*\s*([0-9]*\.?[0-9]+)\s*\p{Sc}*”代码>