我正在尋找一些有關RegEx模式的指導。C#RegEx在管道分隔文件中查找空單元格
我有一個管道分隔的文件,我和我想刪除第四個單元格爲空的所有行。每行可以有任意數量的單元格。
我迄今爲止代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace EpicRemoveBlankPriceRecords
{
class Program
{
static void Main(string[] args)
{
string line;
// Read the file and display it line by line.
System.IO.StreamReader inFile = new System.IO.StreamReader("c:\\test\\test.txt");
System.IO.StreamWriter outFile = new System.IO.StreamWriter("c:\\test\\test_out.txt");
while ((line = inFile.ReadLine()) != null)
{
Match myMatch = Regex.Match(line, @".*\|.*\|.*\|\|.*");
if (!myMatch.Success)
{
outFile.WriteLine(line);
}
}
inFile.Close();
outFile.Close();
//// Suspend the screen.
//Console.ReadLine();
}
}
}
這是行不通的。我認爲這是因爲RegEx是「貪婪」 - 如果有空白單元格,就會匹配,因爲我沒有明確地說「除了管道字符之外的所有內容」。快速谷歌,我看到我可以在模式中使用[^ \ |]。
所以,如果我改變模式:
".*[^\|]\|.*[^\|]\|.*[^\|]\|\|.*"
爲什麼不這項工作要麼?
猜猜我有點困惑,任何指針將不勝感激。
謝謝!
你對我來說太快了 - 我注意到了這一點,並做了相應的編輯。不幸的是我的模式仍然沒有工作。 謝謝 – Ekins86
是否有某些原因需要在這裏使用正則表達式?在我看來,像'string.IsNullOrEmpty(line.Split('|')[2])'這樣的事情會更容易。 –
從1或從0開始的第3個項目? =) – Maslow