繁体   English   中英

正则表达式中的可选组返回太多匹配项

[英]Optional group in Regex returns too many matches

我只想从C#Regex类的输入中匹配值(即2.699.230,20)。

我用"(\\\\.?[0-9]){2,}\\\\,[0-9]{2}"和它的期望值相匹配5.000,002.699.230,201.000.000,00 ,等等。 {2,}仅匹配999,99以上的999,99

但是在同一输入上还有其他要匹配的值。 它们始终为1.000或更高,但是区别在于它没有小数部分的,00 例如: 4.541.0878.997.434

所以我将正则表达式的最后一部分放在二进制(出现0或1次)选项(添加(...)?

"(\\\\.?[0-9]){2,}(\\\\,[0-9]{2})?" 但现在这个匹配上百号,包括181.01.5.28854 ,等等。

那么,我如何使小数部分为可选,使其与1.000,001.000匹配?

看来您只想取得具有的数字. 作为其中的千位分隔符,小数部分中的可选2位数字。

采用

@"\b\d{1,3}(?:\.\d{3})+(?:,\d{2})?\b"

参见regex演示

详细资料

  • \\b前导词边界(可以用(?<!\\d)后面的负数代替,以仅允许前面的数字...)
  • \\d{1,3} -1至3位数字
  • (?:\\.\\d{3})+ -1个或多个点和3位数字的序列( 注意 :如果用*更改+ ,它将匹配小于1.000值)
  • (?:,\\d{2})? -的可选序列,和2位数字。
  • \\b尾随单词边界(可以用(?!\\d)负数lookbahead代替,以仅允许数字后面的数字)。

C#演示

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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM