Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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#_.net_Regex - Fatal编程技术网

C# 我需要帮助建立一个正则表达式

C# 我需要帮助建立一个正则表达式,c#,.net,regex,C#,.net,Regex,这是我第一次使用regex,我有点迷路了。为了给你们一点背景知识,我正在制作一个程序,逐行读取文本文件,并将其保存在一个名为“line”的字符串中。如果该行以制表符o或空格开头,后跟一个或多个数字和点(例如1或1.2.1),后跟另一个制表符或空格,则会将该行复制到另一个文件 到目前为止,我构建了这个正则表达式,但它不起作用 string pattern = @"(\t| ) *[0-9.] (\t| )"; if (line.StartsWith

这是我第一次使用regex,我有点迷路了。为了给你们一点背景知识,我正在制作一个程序,逐行读取文本文件,并将其保存在一个名为“line”的字符串中。如果该行以制表符o或空格开头,后跟一个或多个数字和点(例如1或1.2.1),后跟另一个制表符或空格,则会将该行复制到另一个文件

到目前为止,我构建了这个正则表达式,但它不起作用

            string pattern = @"(\t| ) *[0-9.] (\t| )";

            if (line.StartsWith(pattern))
            {

                //copy line

            }

另外,line.StartsWith是否正确?或者我应该使用类似于rgx.Matches(pattern)的东西吗?

您的模式包含一个不带量词的字符类,它将匹配单个数字或点

为了防止匹配,例如仅匹配点,您可以先匹配数字,然后是匹配点的可选部分,然后再匹配数字
[0-9]+(?:\.[0-9]+)*

请注意,在该部分中,
(\t |)
有两个字符需要匹配,因为该部分中的空格具有含义

您可以简化模式,使用字符类来匹配制表符或空格,而不是使用替换,如果不需要捕获组,可以省略它

例如,您可以使用

  • ^
    字符串的开头
  • [\t]
    匹配单个选项卡或空格
  • [0-9]+
    匹配1+数字0-9
  • (?:\.[0-9]+)*
    对一个点和1+位重复0+次
  • [\t]
    匹配单个选项卡或空格
|

比如说

string s = "\t1.2.1 ";
Regex regex = new Regex(@"^[ \t][0-9]+(?:\.[0-9]+)*[ \t]");

if (regex.IsMatch(s)) {
    //copy line
}
string.StartsWith()
无法识别正则表达式。您需要
System.Text.RegularExpressions.Regex
string s = "\t1.2.1 ";
Regex regex = new Regex(@"^[ \t][0-9]+(?:\.[0-9]+)*[ \t]");

if (regex.IsMatch(s)) {
    //copy line
}