我正在尝试识别文件中具有 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)。这就是我的问题。 请建议:
- 为什么我的正则表达式匹配第 3 行。
- 正确匹配 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)
您最初尝试的错误是数字之间缺少强制性空格。
