Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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#_Regex - Fatal编程技术网

C#正则表达式无法按预期运行

C#正则表达式无法按预期运行,c#,regex,C#,Regex,我对Regex不熟悉。我的意见是: 2233 0 0 20180405 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 此行仅允许使用制表符、数字、浮点、endofline/换行符构造 我读C#中的行内容: 然后我发送iteratedLine来验证函数。 我只允许以下表达式出现在字符串中: 1.选项卡 2.新行/行尾 3.数字

我对Regex不熟悉。我的意见是:

2233    0 0     20180405    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
此行仅允许使用制表符、数字、浮点、endofline/换行符构造

我读C#中的行内容:

然后我发送iteratedLine来验证函数。
我只允许以下表达式出现在字符串中:
1.选项卡
2.新行/行尾
3.数字
4.浮动(0.123)

以下验证功能不起作用,我缺少什么

bool isValid = Regex.IsMatch(inputLine, @"(\d+\.{1}\d*)|(\d)|(\\t)|(\\n)|(\\r)");
如果我使用regex(\d+。{1}\d*)|(\d)|(\t)|(\n)|(\r)并在regex101.com中使用它的假定失败行,则这4个限制具有其他字符

感谢您使用的1,它在指定的输入字符串中查找匹配项。在您的正则表达式中,您可以使用替换项来查找匹配项,例如一个或多个数字。如果您的字符串还包含不需要的字符,则替换仍将匹配一个或多个数字,而不是生成的不需要的字符,isMatch仍将返回
true

您可以使用锚定符断言行的开头,匹配一个或多个数字
\d+
,后跟一个可选部分
(?:\。\d+)
,该部分匹配一个点和一个或多个数字

然后匹配一个选项卡
\t
,后跟多个数字,后跟一个可选部分,该部分匹配一个点和一个或多个数字,并断言行的结尾
$

重复第二部分一次或多次,以便至少有两个值由选项卡分隔

您可以使用它在指定的输入字符串中查找匹配项。在您的正则表达式中,您可以使用替换项来查找匹配项,例如一个或多个数字。如果您的字符串还包含不需要的字符,则替换仍将匹配一个或多个数字,而不是生成的不需要的字符,isMatch仍将返回
true

您可以使用锚定符断言行的开头,匹配一个或多个数字
\d+
,后跟一个可选部分
(?:\。\d+)
,该部分匹配一个点和一个或多个数字

然后匹配一个选项卡
\t
,后跟多个数字,后跟一个可选部分,该部分匹配一个点和一个或多个数字,并断言行的结尾
$

重复第二部分一次或多次,以便至少有两个值由选项卡分隔


您缺少几点:

  • 您需要将正则表达式的两端锚定到字符串的两端,因此它需要在开始处使用
    ^
    ,在结束处使用
    $
    。否则,如果行的任何部分匹配,它都可以返回true;但我们只希望在整行与模式匹配时返回true
  • StreamReader的条带位于生产线的末端,因此您无需担心这一点
  • 您需要强制在选项卡之间设置值,否则将只通过一行选项卡
  • 这应该可以解决问题

    ^\d+(?:\.\d+)?(?:\t\d+(?:\.\d+)?)+$
    
    如果您希望每行上有特定数量的值,可以将最后的
    +
    替换为
    {x,x}
    ,其中
    x
    是项目数减去一


    另一种方法是使用
    string.Split
    并使用Linq检查所有项目是否从
    double.TryParse

    返回true您缺少几点:

  • 您需要将正则表达式的两端锚定到字符串的两端,因此它需要在开始处使用
    ^
    ,在结束处使用
    $
    。否则,如果行的任何部分匹配,它都可以返回true;但我们只希望在整行与模式匹配时返回true
  • StreamReader的条带位于生产线的末端,因此您无需担心这一点
  • 您需要强制在选项卡之间设置值,否则将只通过一行选项卡
  • 这应该可以解决问题

    ^\d+(?:\.\d+)?(?:\t\d+(?:\.\d+)?)+$
    
    如果您希望每行上有特定数量的值,可以将最后的
    +
    替换为
    {x,x}
    ,其中
    x
    是项目数减去一


    另一种方法是使用
    string.Split
    并使用Linq检查所有项目是否从
    double.TryParse

    返回true。输入中的数据是否有任何顺序?是。只要用标签分开。。基本上,我读的是一个文件,每行包含制表符分隔的数字。我想验证行没有空格或wierd字符..因此您提供的输入应该失败,因为不仅仅有制表符作为分隔符,对吗?是的,这是真的。您能试试吗?输入中的数据可以按任何顺序吗?是的。只要用标签分开。。基本上,我读的是一个文件,每行包含制表符分隔的数字。我想验证该行没有空格或wierd字符..因此您提供的输入应该失败,因为不仅仅有制表符作为分隔符,对吗?是的,这是真的。您能试试吗?谢谢,我明天再试。空值可能在选项卡之间。我以前见过。我不想强制执行。我接收来自外部组件的输入。。。无法控制..如果值可能丢失,则需要调整我给出的表达式,将出现的
    \d+(?:\。\d+)
    更改为括号内,后面是问号。谢谢,我明天再试。空值可能在选项卡之间。我以前见过。我不想强制执行。我接收来自外部组件的输入。。。无法控制..如果可能缺少值,则需要调整我给出的表达式,将
    \d+(?:\。\d+?
    的两个匹配项都更改为在括号内,后跟一个问号。