如何检测和删除文本文件中包含特定字母和随机数的行?

时间:2019-08-14 08:06:19

标签: c# contains

我希望检测文本文件中包含字母“ p”和随机数的特定行,然后将其完全删除。 另外:如果“ p”后面的数字可以从0到几乎任何可能的数字,我不知道是否足以让程序直接检测“ p”后跟“ 0-9”(例如p3,p6)?让程序检测到该行然后删除它。

文本文件如下所示:

randomline1
p123 = 123
p321 = 321
randomline2

运行程序后,文本文件应如下所示:

randomline1
randomline2

我尝试使用contains方法,但是它说该方法有一个重载,因为有2个参数(请看一下代码)。

int[] anyNumber = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

foreach (string line in textfile)
{
    if (line.Contains("p{0}", anyNumber));
    {
        temp = line.Replace(line, "");
        newFile.Append(temp + "\r\n");
        continue;
    }

    newFile.Append(line + "\r\n");
}

预期结果应该是检测到并删除了这些行,但出现了一条错误消息:“方法'Contains'的重载没有2个参数”(对于包含Contains方法的行)和“检测到无法到达的代码”(附加到最后一行)和“可能错误的空语句”(也包含Contains方法的行)。

2 个答案:

答案 0 :(得分:2)

如果您需要匹配多个位数,请使用d+。然后添加字母p进行过滤。最后,使用^只匹配以pxxx开头的行

Regex regex = new Regex(@"^p\d+");

foreach (string line in textfile)
{    
   if (!regex.IsMatch(line)){ // get only the lines without starting by pxxx
      newFile.Append(temp + "\r\n");
   }
   newFile.Append(line + "\r\n");
}

答案 1 :(得分:0)

@Antoine V有正确的方法。您只需要将其更改为:

Regex regex = new Regex(@"^p\d+");

foreach (string line in textfile)
{    
    if (!regex.IsMatch(line))
    {   
        // get only the lines without starting by pxxx
        newFile.Append(line + "\r\n");
    }
}

现在,仅当行与模式不匹配时才添加行。如果匹配,则不执行任何操作。它与原始代码不符,在其中添加了空行,但与示例一致。