我想只匹配C#Regex类输入中的值(即2.699.230,20)。
我使用"(\\.?[0-9]){2,}\\,[0-9]{2}"
,它匹配所需的值5.000,00
,2.699.230,20
,1.000.000,00
等。{2,}
仅匹配{{1}以上的值}}
但是我想要匹配的同一输入上还有其他值。它们总是999,99
或更高,但区别在于它没有小数1.000
部分。示例:,00
,4.541.087
。
所以我把正则表达式的最后一部分放在二进制(存在0或1次)选项中(在小数部分周围添加8.997.434
:
(...)?
,但现在匹配数百个数字,包括"(\\.?[0-9]){2,}(\\,[0-9]{2})?"
,18
,1.0
,1.5.2
等。
那么,我如何使小数部分可选,所以它匹配8854
和1.000,00
?
答案 0 :(得分:3)
您似乎只想获得其中包含.
千位分隔符的数字,并且小数部分中有可选的2位数字。
使用
@"\b\d{1,3}(?:\.\d{3})+(?:,\d{2})?\b"
请参阅regex demo。
详细:
\b
- 领先的字边界(可能会被(?<!\d)
负面的后观替换,以便在之前只允许数字...)\d{1,3}
- 1至3位数字(?:\.\d{3})+
- 一个点或3个数字的一个或多个序列(注意:如果您使用+
更改*
,它将匹配1.000
以下的值{1}})(?:,\d{2})?
- ,
和2位数的可选序列。\b
- 尾随字边界(可能会被替换为(?!\d)
否定明字形以禁止数字后面的数字)。var re = @"\b\d{1,3}(?:\.\d{3})+(?:,\d{2})?\b";
var str = "values 5.000,00, 2.699.230,20, 1.000.000,00, etc. 999,99 including 18, 1.0, 1.5.2, 8854, etc";
var res = Regex.Matches(str, re)
.Cast<Match>()
.Select(p => p.Value)
.ToList();
Console.WriteLine(string.Join("\n", res));