我希望检测文本文件中包含字母“ 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
方法的行)。
答案 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");
}
}
现在,仅当行与模式不匹配时才添加行。如果匹配,则不执行任何操作。它与原始代码不符,在其中添加了空行,但与示例一致。