2 Stimmen

Können Regexes einen Teilstring erfassen, ohne Gruppen zu verwenden?

Der Ausdruck foo/(\w*)/bar passt auf den String foo/123/bar.

Das ist wahrscheinlich etwas Grundlegendes, das ich über Regexes übersehen habe, aber oft möchte ich nur den Teilstring zwischen den Schrägstrichen abrufen. Gibt es eine einfache .NET-API, die ich verwenden kann, ohne auf die Gruppensammlung zugreifen zu müssen? Oder eine alternative Möglichkeit, den Regex zu schreiben?

Danke!

2voto

Paul Creasey Punkte 27679

Es ist möglich, Lookaround zu verwenden:

(?<=foo/)\w*(?=/bar) 

angewendet auf foo/123/bar. passt "123" an. Gruppen sind eine bessere Methode und beachten Sie, dass Lookaround (insbesondere Look behind) nicht von allen Regex-Tools unterstützt wird, aber von .net unterstützt wird.

Hinweis: \w ist eine Abkürzung für eine Zeichenklasse, Sie müssen sie nicht innerhalb von [] setzen

1voto

Aviad P. Punkte 30713

Die kurze Antwort ist nein, aber es ist wirklich kein Problem, den Capture zu erhalten:

string cap = Regex.Match(inputString, @"foo/(\w*)/bar").Groups[1].ToString();

0voto

iamamac Punkte 9144

Wenn garantiert ist, dass der String übereinstimmt, und Sie nur den Teilstring zwischen den beiden Schrägstrichen möchten, kann anstelle des regulären Ausdrucks String.Split verwendet werden:

String sub = str.Split('/')[1]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X