C# 一行中4个整数或2个双精度精确匹配的正则表达式
我试图识别文件中具有4个整数值或2个双精度值的行。我的正则表达式如下所示:C# 一行中4个整数或2个双精度精确匹配的正则表达式,c#,regex,C#,Regex,我试图识别文件中具有4个整数值或2个双精度值的行。我的正则表达式如下所示: var match = new Regex(@"^(?<Values>(((\d+\s*){4})|(\d+\.\d+\s*){2}))$"); 这里,我的正则表达式与上面第4行和第5行正确匹配。没关系。但是,它也匹配第3行(01129)。这是我的问题请建议: 为什么我的正则表达式匹配第3行 正确的正则表达式,它与一行中的4个整数或2个双精度值完全匹配 我想这就是你想要的: ^(((\d+\s+){3}\
var match = new Regex(@"^(?<Values>(((\d+\s*){4})|(\d+\.\d+\s*){2}))$");
这里,我的正则表达式与上面第4行和第5行正确匹配。没关系。但是,它也匹配第3行(01129)。这是我的问题请建议:
我想这就是你想要的:
^(((\d+\s+){3}\d+)|(\d+\.\d*\s+\d+\.\d*))\s*$
测试
解释
^(
((\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)
您最初尝试时的错误是数字之间缺少强制空格。我想这就是您要寻找的:
^(((\d+\s+){3}\d+)|(\d+\.\d*\s+\d+\.\d*))\s*$
测试
解释
^(
((\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)
您最初尝试时的错误是数字之间缺少强制空格。您的正则表达式说明:
(\d+\s*){4}
这意味着它将尽可能多地匹配以下四次:
- 一系列数字,后跟
- 零到无限空间
|
后面的所有内容都在第4组中。发生的情况是,引擎看到0 1 129,并考虑如何匹配其中的4个\d+\s*
。因为空格是可选的,所以它表示ok,我将在9之前拆分数字。这样就有4个\d+\s*
要解决这个问题,您需要编写一个模式,将match\d+\s+
3次和\d
1次。您还需要对“2个十进制数”条件执行此操作
^(?<Values>(((\d+\s+){3}\d+)|(\d+\.\d+\s+)\d+\.\d+))\s*$
^((((\d+\s+{3}\d+)|(\d+\.\d+\s+\d+\.\d+)))*$
您的正则表达式是这样说的:
(\d+\s*){4}
这意味着它将尽可能多地匹配以下四次:
- 一系列数字,后跟
- 零到无限空间
|
后面的所有内容都在第4组中。发生的情况是,引擎看到0 1 129,并考虑如何匹配其中的4个\d+\s*
。因为空格是可选的,所以它表示ok,我将在9之前拆分数字。这样就有4个\d+\s*
要解决这个问题,您需要编写一个模式,将match\d+\s+
3次和\d
1次。您还需要对“2个十进制数”条件执行此操作
^(?<Values>(((\d+\s+){3}\d+)|(\d+\.\d+\s+)\d+\.\d+))\s*$
^((((\d+\s+{3}\d+)|(\d+\.\d+\s+\d+\.\d+)))*$
+1:细微的挑剔。。。无需将第一个十进制数括起来,因为没有重复计数it@Sweeper,非常感谢。它对我很有用,我也能理解一些关于正则表达式引擎在这种情况下的工作原理。请推荐任何链接,我可以参考以了解内部正则表达式引擎工作的基本知识。@6502我只是把它放在那里,以明确有两个\d+\.\d+\s+
您认为它足够清晰吗?+1:细微的挑剔。。。无需将第一个十进制数括起来,因为没有重复计数it@Sweeper,非常感谢。它对我很有用,我也能理解一些关于正则表达式引擎在这种情况下的工作原理。请推荐任何链接,我可以参考以了解内部正则表达式引擎工作的基本知识。@6502我只是把它放在那里,以说明有两个\d+\.\d+\s+
您认为它足够清晰吗?或者感谢它为我工作。是否有任何工具可以为我生成正则表达式,或者至少指导我创建正则表达式?我不知道有任何工具可以生成正则表达式,但我用来测试的工具(请参阅我答案中的链接)帮助很大!谢谢,这对我有用。是否有任何工具可以为我生成正则表达式,或者至少指导我创建正则表达式?我不知道有任何工具可以生成正则表达式,但我用来测试的工具(请参阅我答案中的链接)帮助很大!