简体   繁体   中英

Trouble constructing correct regular expression

Trying to construct a regular expression that will match each line of the below list.

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.

Everything is fine until a line has a blank "message", for example lines 2 and 6. Here's what the current regular expression looks like.

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

The current regular expression will set the line below itself as the message if the original message group is blank. I've tried quite a few things, as well as making the message optional. How can I allow the regex to recognize the message as empty?

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

使您的\\s+成为\\s这样就可以匹配一些东西而不是吃掉它

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM