Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.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# 正则表达式与C中的字符串格式不匹配#_C#_.net_Regex - Fatal编程技术网

C# 正则表达式与C中的字符串格式不匹配#

C# 正则表达式与C中的字符串格式不匹配#,c#,.net,regex,C#,.net,Regex,我正在通过串行端口接收数据,我想验证数据格式是否正确。我期望的数据格式如下 数字,数字,数字,数字->120025006500,90 我是这样使用正则表达式的 Regex.IsMatch(s,@“^[0-4095]\,[0-4095]\,[0-4095]\,[0-4095]\,[0-4095]$” 使用4095,因为数字范围介于0和4095之间。我需要帮助。提前谢谢。我们不能在这样的数字范围内做。您可以将此正则表达式用于您的用例: (0-9[0-9][0-9][0-9][0-9][0-9][0-

我正在通过串行端口接收数据,我想验证数据格式是否正确。我期望的数据格式如下

数字,数字,数字,数字->120025006500,90

我是这样使用正则表达式的

Regex.IsMatch(s,@“^[0-4095]\,[0-4095]\,[0-4095]\,[0-4095]\,[0-4095]$”


使用4095,因为数字范围介于0和4095之间。我需要帮助。提前谢谢。

我们不能在这样的数字范围内做。您可以将此正则表达式用于您的用例:

(0-9[0-9][0-9][0-9][0-9][0-9][0-9][0-9[0-9[0-9][0-9][0-9][0-9][0-9][0-9[0-9][0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9][0-9[0-9][0-9][0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9][0-9[0-9][0-9][0-9[0-9[0-9][0-9[0-9[0-9[0-9[0-9]0-9]0-9]0-9]0-9][0-9[0-9[0-9[0-9[0-9][0-9][0-9][0-9][0-9][0-9][3[0-9][0-9][0-9]| 40[0-9][0-5])$

编辑:

(0-0-9[0-9[0-9{{{1,3 3 3}{0-9{{3-9}{3-9}{3}3[0-9[0-9{{{3}{3}3[0-9[0-9[0-9{{{1,3 3.3}{{0 0-9{3}3}{{3}}3[0 0-9}3[3[3[0-9[3[0-9[3[3[0-9[0-9{{{{{{{{{1,3.0-9}3}3[1,3}3[0-3}3[0-3[0-9[0-9}3[0-3[0 0-9[0-9{{0-9{{{{{{0-9}3[1,3}>

或者

我想你现在明白了。要检查数字是否介于0-4095之间

  • 数字可以是个位数0-9
  • 可以是两位数[0-9][0-9]
  • 它可以是任何三位数[0-9][0-9][0-9]
  • 但是,对于一个4位数的数字,我们必须忽略所有 大于4095

    这就是为什么查询需要比平时更长的原因

  • 1[0-9][0-9][0-9]涵盖从1开始的所有4位数字

  • 40[0-9][0-5]涵盖4000到4095之间的所有数字
    • 也许

      ^(?:40\d[0-5]|[1-3]\d{3}|\d{1,3}),(?:40\d[0-5]|[1-3]\d{3}|\d{1,3}),(?:40\d[0-5]|[1-3]\d{3}|\d{1,3}),(?:40\d[0-5]|[1-3]\d{3}|\d{1,3})$
      
      如果
      000000000000
      有效,可能工作正常,否则

      ^(?:(?:40\d[0-5]|[1-3]\d{3}|[1-9]\d{2}|[1-9]\d|\d),){3}(?:40\d[0-5]|[1-3]\d{3}|[1-9]\d{2}|[1-9]\d|\d)$
      
      也可能是一种选择

      试验
      如果您希望简化/修改/探索表达式,将在的右上面板中进行解释。如果您愿意,还可以在中查看它与一些示例输入的匹配情况


      正则表达式电路 可视化正则表达式:


      您可以使用简单的LINQ表达式和int.TryParse方法,无需依赖正则表达式:

        var sections = e.Split(',');
        sections.Count() == 4 && 
        sections.All(s => int.TryParse(s, out int i) && i >= 0 && i <= 4095);
      
      var sections=e.Split(',');
      sections.Count()==4&&
      
      sections.All(s=>int.TryParse(s,out int i)& & i>=0 & &将数字解析为INTS,比较与ReXEX LINGO中的数字范围比较容易的值。如果您想使模式变短,请使用逗号,但强制使用“<代码> \b>代码>。我提出这是非常有帮助的!经过两个步骤的工作之后,用正则表达式验证格式,然后PAR。通过使用整数检查它们的值,我得出结论这是最好的答案。正则表达式有其局限性。在这种情况下,我认为正则表达式不是正确的答案。同意,正则表达式很快变得难以阅读,这克服了简洁性。
        var sections = e.Split(',');
        sections.Count() == 4 && 
        sections.All(s => int.TryParse(s, out int i) && i >= 0 && i <= 4095);