【问题标题】:I need help for building a regex我需要帮助来构建正则表达式
【发布时间】:2023-03-17 15:58:01
【问题描述】:

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

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

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

            if (line.StartsWith(pattern))
            {

                //copy line

            }

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

【问题讨论】:

  • string.StartsWith() 无法识别正则表达式。你需要System.Text.RegularExpressions.Regex

标签: c# .net regex


【解决方案1】:

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

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

请注意,在这部分 (\t| ) 中,预计有 2 个字符会匹配,因为该部分中的空格是有意义的。

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

你可以使用IsMatch而不是StartsWith

^[ \t][0-9]+(?:\.[0-9]+)*[ \t]
  • ^ 字符串开始
  • [ \t] 匹配单个制表符或空格
  • [0-9]+ 匹配 1+ 个数字 0-9
  • (?:\.[0-9]+)* 重复 0+ 次一个点和 1+ 个数字
  • [ \t] 匹配单个制表符或空格

Regex demo | C# demo

例如

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2012-11-30
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多