2017-09-27 72 views
0

嘗試構造一個正則表達式,它將匹配下面列表的每一行。構建正確的正則表達式時遇到問題

6220 1 10 Because he's the hero Gotham deserves, 
6220 9 10 
5181 5 7 in time, like tears in rain. Time to die. 
6220 3 10 So we'll hunt him. 
6220 5 10 Because he's not a hero. 
5181 6 7  
5181 2 7 shoulder of Orion. I watched C-beams 
5181 4 7 Gate. All those moments will be lost 
6220 6 10 He's a silent guardian. 
5181 3 7 glitter in the dark near the Tannhäuser 
6220 7 10 A watchful protector. 
5181 1 7 believe. Attack ships on fire off the 
6220 0 10 We have to chase him. 
5181 0 7 I've seen things you people wouldn't 
6220 4 10 Because he can take it. 
6220 2 10 but not the one it needs right now. 
6220 8 10 A Dark Knight. 

一切都很好,直到行有一個空白的「消息」,例如線2和6以下是當前正則表達式的模樣。

var regex = new Regex(
    @"(?<id>\d+)\s+(?<index>\d+)\s+(?<count>\d+)\s+(?<message>.+)?"); 

foreach (Match match in regex.Matches(File.ReadAllText("samples.txt"))) 
{ 
    Console.WriteLine(match.Groups["message"].Value); 
} 

如果原始消息組爲空白,則當前正則表達式會將其自己下方的行設置爲消息。我已經嘗試了很多東西,並且讓消息可選。我如何讓正則表達式將消息識別爲空?

+0

您的空白是不可選的:'\ S +' –

回答

0
(?<id>\d+)\s+(?<index>\d+)\s+(?<count>\d+)\s(?<message>.+)? 

讓你\s+一個\s所以有些事相匹配,而不是吃它