无法构建正确的正则表达式

时间:2017-09-27 02:05:19

标签: c# regex

尝试构建一个与下面列表的每一行匹配的正则表达式。

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);
}

如果原始邮件组为空,则当前正则表达式会将自身下方的行设置为邮件。我已经尝试了很多东西,并且使消息可选。如何让正则表达式将消息识别为空?

1 个答案:

答案 0 :(得分:0)

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

让你的\s+成为\s所以还有一些东西要匹配而不是吃它