Skip to main content
 首页 » 编程设计

c#之一行中 4 个整数或 2 个 double 值的精确匹配的正则表达式

2024年02月04日32lori

我正在尝试识别文件中具有 4 个整数值或 2 个 double 值的行。我的正则表达式如下:

 var match = new Regex(@"^(?<Values>(((\d+\s*){4})|(\d+\.\d+\s*){2}))$"); 

文件中被解析的行示例:

element 1 2 
8 24 2 1 1 
0 1 129 
2 2 0 0  
30.200001 1000.0000 
208 0 0 0 0 0 0 0  
..... 
..... 

在这里,我的正则表达式与上面的第 4 行和第 5 行正确匹配。没关系。但是,它也匹配第 3 行 (0 1 129)。这就是我的问题。 请建议:

  1. 为什么我的正则表达式匹配第 3 行。
  2. 正确匹配 4 号之一的正则表达式。整数或2号一行中的 double 值。

请您参考如下方法:

我想这就是您要找的:

^(((\d+\s+){3}\d+)|(\d+\.\d*\s+\d+\.\d*))\s*$ 

已测试 here .


解释

^( 
  ((\d+\s+){3}\d+) # 4 numbers separated by at least one space 
  | 
  (\d+\.\d*\s+\d+\.\d*) # 2 floats separated by at least one space 
)\s*$ # optional spaces at end of line (e.g., line 4) 

您最初尝试的错误是数字之间缺少强制性空格。