Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一行中4个整数或2个双精度精确匹配的正则表达式_C#_Regex - Fatal编程技术网

C# 一行中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}\

我试图识别文件中具有4个整数值或2个双精度值的行。我的正则表达式如下所示:

 var match = new Regex(@"^(?<Values>(((\d+\s*){4})|(\d+\.\d+\s*){2}))$");
这里,我的正则表达式与上面第4行和第5行正确匹配。没关系。但是,它也匹配第3行(01129)。这是我的问题请建议:

  • 为什么我的正则表达式匹配第3行
  • 正确的正则表达式,它与一行中的4个整数或2个双精度值完全匹配

  • 我想这就是你想要的:

    ^(((\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}
    
    这意味着它将尽可能多地匹配以下四次:

    • 一系列数字,后跟
    • 零到无限空间
    这就是它与第3行的匹配方式:

    01 12 | 9

    |
    后面的所有内容都在第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}
    
    这意味着它将尽可能多地匹配以下四次:

    • 一系列数字,后跟
    • 零到无限空间
    这就是它与第3行的匹配方式:

    01 12 | 9

    |
    后面的所有内容都在第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+
    您认为它足够清晰吗?或者感谢它为我工作。是否有任何工具可以为我生成正则表达式,或者至少指导我创建正则表达式?我不知道有任何工具可以生成正则表达式,但我用来测试的工具(请参阅我答案中的链接)帮助很大!谢谢,这对我有用。是否有任何工具可以为我生成正则表达式,或者至少指导我创建正则表达式?我不知道有任何工具可以生成正则表达式,但我用来测试的工具(请参阅我答案中的链接)帮助很大!