Im Moment habe ich die Zeichenfolge:C# gierig regulären Ausdruck einschließlich Match Text
"CL,UP_REMOVE_LINE,#global_session_id,arg_stage=false,arg_project_id=-1,#global_line_id,arg_activity_id=-1,arg_mode=1,arg_line_id=#global_line_id,arg_session_id=-1"
Ich habe versucht:
splitty = Regex.Split(lineText,@"[\,]+\s*(?>arg_){1}?");
und erhalten:
{string[7]}
[0]: "CL,UP_REMOVE_LINE,#global_session_id"
[1]: "stage=false"
[2]: "project_id=-1,#global_line_id"
[3]: "activity_id=-1"
[4]: "mode=1"
[5]: "line_id=#global_line_id"
[6]: "session_id=-1"
I Spaltung bin durch mindestens eine Komma, gefolgt von willkürlichem Leerraum, gefolgt vom "arg_" -Trennzeichen, aber gibt es eine Möglichkeit, den "arg_" -Anteil intakt zu halten, dh Indices [1-6]?
Perfekt, danke. Meine gierige Lösung wird also nicht funktionieren, weil sie konsumiert, was sie zusammenbringt. Ich war unter der gegenteiligen Annahme auf 'Nonbacktracking (oder "gierigen") Teilausdruck' Eintrag von https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx wo [13579] ((A + B +) ergibt "1ABB", "3ABB" und "5AB" in "1ABB 3ABBC 5AB 5AC". Können Sie in diesem Fall erklären, warum die gierige Lösung das Gegenteil unserer gegenwärtigen Annahme zu tun scheint? – Rice
Atomare Gruppen "schalten" nur die Rückverfolgung in einen Teilausdruck ab, sie stimmen immer noch überein und konsumieren Text, während Blickwinkel die Zeichen nicht konsumieren, sie prüfen nur das Vorhandensein oder Fehlen eines Textes vor oder nach der aktuellen Position * ohne * den Index zu verschieben . Siehe [* Mastering Lookahead und Lookbehind *] (http://www.rexegg.com/regex-lookarounds.html): * Es ist, dass am Ende eines Lookahead oder eines Lookbehind, die Regex-Engine nicht auf der verschoben wurde Zeichenfolge. Sie können drei weitere Lookaheads nach dem ersten verketten, und die Regex-Engine bewegt sich immer noch nicht. * –