2016-06-10 21 views
0

Ich versuche, Werte in Gruppen aus einer Zeichenfolge zu extrahieren. Meine Regex istRegulärer Ausdruck am Ende der Zeichenfolge stimmt nicht überein

string str = @"DEMOV 1'07"" MOT Lifestyle 503080 Pure Rain Nozzle Feb 13 472000"; 

const string type = @"(?<type>\w+)"; 
const string minutes = @"((?<minutes>\d+)\')?"; 
const string seconds = @"((?<seconds>\d+)\"")?"; 
const string body = @"(?<body>.+)"; 
const string id = @"(?<id>\s\d{6})?"; 

var pattern1 = String.Format(@"^{0}(?:\s\w+)?\s({1}{2}|{1}|{2})\s?{3}{4}$", type, minutes, seconds, body, id); 
var m1 = Regex.Match(str, pattern1); 

Ich bekomme das Spiel, aber die Gruppe erhält nicht die letzten 5 Stellen.

Kann mir jemand sagen, was ich hier falsch mache?

Hier finden Sie die Ausgabe, die ich bekomme.

enter image description here

+0

Als ' . + 'ist gierig, es stimmt schon mit diesen Ziffern überein, daher passt die optionale Gruppe nicht. Sie können '. +?' Für die Lazy-Anpassung verwenden. –

+0

Ja. Es funktionierte. Danke –

Antwort

1

Verwenden Sie die nicht-gierige Version (verwenden .+? für body), und fügen Sie nicht die Räume der id Gruppe:

const string body = @"(?<body>.+?)"; 
const string id = @"\s(?<id>\d{6})?"; 

In Aktion: https://dotnetfiddle.net/L1yL3C

+0

Ja, es hat funktioniert. Vielen Dank. Wie bekomme ich die Werte der Gruppen, dh. Wie bekomme ich den Gruppenwert von ID? –

+0

Ich habe es herausgefunden. var min = m1.Gruppen ["Minuten"]. Wert; –

+0

'm1.Groups [" id "]' – Jcl

Verwandte Themen