2012-06-19 54 views
2

我有一個文本文件,我想用正則表達式解析它。 我如何可以提取「條目號」之間的空行的下一個「入口#」正則表達式爲

GmtOffset=120 
GmtExistFlag=0 
LocalTimeFlag=0 
Entry #1 
EventType=1 
FieldType=256 
FieldValue=12-05-2010, 11:00:00 
FieldType=512 
FieldValue=12-05-2010, 11:30:00 
FieldType=1 
FieldValue(3)=Jku 

Entry #2 
EventType=1 
FieldType=256 
FieldValue=15-05-2010, 06:00:00 
FieldType=512 
FieldValue=15-05-2010, 06:30:00 
FieldType=1 
FieldValue(3)=Lsh 
FieldType=1024 
FieldValue=15-05-2010, 05:45:00 
FieldType=65536 
FieldValue=1 

Entry #3 
EventType=4 
FieldType=1 
FieldValue(4)=STYL 
FieldType=1024 
FieldValue=13-05-2010, 11:00:00 
FieldType=65536 
FieldValue=1 
FieldType=2097152 
FieldValue=2 
FieldType=8388608 
FieldValue=-2147483648 

前的文本塊怎麼樣?

感謝

+3

正則表達式不是所有文本解析的魔法解決方案。有時候,在這種情況下,簡單的分割或文本閱讀器就可以完成這項工作。 –

+0

我沒有嘗試任何東西。 –

+0

我同意這不是魔術,但它更優雅。 –

回答

1

雖然我與@ie解決同意,我認爲解決方案將忽略以下的Entry #數量的問題。在這種情況下,Regex.Split會起作用。

string[] matches = Regex.Split(inputStrng, @"Entry #\d+\s+"); 
foreach (string match in matches) 
{  
    Console.WriteLine(match); 
} 
7

SplittingEntry #會給你想要的東西。正則表達式在這裏沒有必要。只是不要分裂,在結尾處,刪除空行:

var blocks = text.Split("Entry #"); 
foreach (var block in blocks) 
{ 
    // removing the line with the entry number 
    block = block.Substring(block.IndexOf(Environment.NewLine)); 

    // removing the empty lines 
    block = block.Trim('\n', '\r'); 

    // add your processing here 
} 
+0

'Entry#'後面跟着一個數字。我認爲OP不希望在返回的塊中輸入該號碼 – Steve

+0

@Steve ok,我更新了示例。無論如何,我只是拋出一個想法,進一步的調整是可能的 –