用于验证多种类型数字的正则表达式
本文关键字:数字 正则表达式 类型 种类 验证 用于 | 更新日期: 2023-09-27 17:53:22
我是Regex的新手,我想知道如何在c#中检测Regex的数字,它总是以格式显示:#,###
例:2 000,000
into 2,000
Ex: 15 000.000
into 15,000
示例:6.700
into 6,700
Ex: .3.3.3
into 0,300
这些是我正在做的验证的一些例子
正如评论所暗示的,这个问题不是很清楚。为了让你的例子工作,你可以使用例如
(?:(?<int>'d+)[ .,]?|[.,])
(?<frac>'d+)?
(?:[ .,]'d+)*
匹配"整数部分"answers"小数部分"除以.
, ,
或(有线,但这是我从你的例子中读出来的-因为
6.700 => 6,700
和int
我假设到处都有逗号分隔符)。
我很确定我没有写对!至少不完全如此。您提供的示例看起来像带有不同千位分隔符的数字,但似乎没有系统。
但是,这就是你用上面的正则表达式匹配的内容:
<>之前Int | | frac |其他任何东西----+-+------+--------------2 | | 000 | 00015 | | 000 | .0006 |。| 70 ||。[au:] [au:之前另外,它匹配不含小数部分的数字。
详细(?:(?<int>'d+)[ .,]?|[.,])
匹配小数(一个以上)并将它们存储在名为.
的组中。匹配可选的、
.
或,
。
或
匹配.
或,
。
(?<frac>'d+)?
可选择匹配分数部分(一个或多个小数)。
(?:[ .,]'d+)*
匹配,
integral + fraction / Math.Pow(10, fraclen)
或10^len
和一个或多个小数(重复此零或多次)。最后一个是为了防止len
的最后部分在后续调用中匹配。
然后你可以使用MatchEvaluator-Function(这里以委托的形式)来替换这些值。
var rx = new Regex(@"
(?:(?<int>'d+)[ .,]?|[.,])
(?<frac>'d+)?
(?:[ .,]'d+)*
",
RegexOptions.IgnorePatternWhitespace
);
var deDE = new System.Globalization.CultureInfo("de-DE");
text = rx.Replace(text, delegate(Match match) {
int integral;
int fraction;
int fraclen = match.Groups["frac"].Length;
int.TryParse(match.Groups["int"].Value, out integral);
int.TryParse(match.Groups["frac"].Value, out fraction);
var val = integral + fraction / Math.Pow(10, fraclen);
return String.Format(deDE, "{0:0.000}", val);
});
每次匹配时调用该函数。在内部,我读出组,将它们转换成整数,然后用70/10^2 == 70/100 == 0.7
(整部分+分数部分除以String.Format
,其中de-DE
是分数部分的字符串长度,因此通过计算,
,"70"变成0.7)创建匹配的值。
最后,我返回CC_28和CultureInfo CC_29。这样做是因为在德国您使用CC_30作为小数分隔符。还有其他方法——还有许多其他方法可以输出这样的数字。
这只是一个例子