Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 你能推荐一个更好的替代这个正则表达式吗?_C#_Regex - Fatal编程技术网

C# 你能推荐一个更好的替代这个正则表达式吗?

C# 你能推荐一个更好的替代这个正则表达式吗?,c#,regex,C#,Regex,我发现这个正则表达式正在我的一个项目中使用。假设它从包含货币的字符串中解析数字 比如“14.22欧元”=>14.22欧元 但它似乎并不支持这一点。有人能帮我调整它,使之也适用于特殊的货币符号吗 作为一种替代方法,我发现这个([\d,.]+)可以满足我的需要,但我不确定是否遗漏了任何特殊情况,或者它太通用了。我不知道您是否希望使用现有类,但您可能希望尝试System.Data.SqlTypes.SqlMoney。。。这将确保您的字符串不只是被某些可能失败的regexp解析 用途如下: privat

我发现这个正则表达式正在我的一个项目中使用。假设它从包含货币的字符串中解析数字

比如“14.22欧元”=>14.22欧元

但它似乎并不支持这一点。有人能帮我调整它,使之也适用于特殊的货币符号吗


作为一种替代方法,我发现这个
([\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}*”