2009-05-26 8 views
2

Ich versuche einen regulären Ausdruck zu schreiben, der das letzte ':' und alles danach bekommen wird. Dies ist mein regulärer Ausdruck in C#:Regulärer Ausdruck, um den letzten Doppelpunkt in String und alles danach zu bekommen

Regex rx5 = new Regex(@"[A-Za-z.][^\s][^:]{1,}$",RegexOptions.Singleline); 

es funktioniert, außer es enthält das ':' drin. Wie bekomme ich einfach alles nach dem ':' ohne das ':'?

+0

': ([^:] *) $' wäre ein geeignetes Muster, aber in Zukunft ist http://regexr.com dein Freund. –

Antwort

2

würde ich diesen regulären Ausdruck verwenden:

^(?:[^:]*:)+([^:]*)$ 

Das erste Gruppenspiel wird dann den Rest nach den letzten : enthält.

1

eine Gruppe verwenden, und Sie können auch die Regex etwas umschreiben einfacher:

Regex rx5 = new Regex(":([^:]*)$",RegexOptions.Singleline); 

Dann haben Sie:

Match ma = rx5.Match("test:1:2:3"); 
if (ma.Success) 
{ 
    // your content is in ma.Groups[1].Value 
} 
11

Durch die nicht einen regulären Ausdruck verwenden, aber String.LastIndexOf und Substring ()

1

Oder Sie könnten nur die folgenden Muster verwenden:

Regex rx5 = new Regex("[^:]+)$",RegexOptions.Singleline); 
+0

+1, aber den nutzlosen Singleline-Modifikator fallen lassen. Tatsächlich gehört es auch keiner der anderen Antworten an. –

+0

Der Ausdruck: '" [^:] +) $ "' ist eine ungültige Syntax (nicht übereinstimmende Klammern). Darüber hinaus stimmt dieser Ausdruck (einmal behoben) fälschlicherweise mit Zeichenfolgen überein, die überhaupt keinen Doppelpunkt haben. – ridgerunner

1

ein Lookbehind können Sie nicht die letzte umfassen ":"

Regex rx5 = new Regex("(?<=:)([^:]*)$",RegexOptions.Singleline); 
2

Sie sind besser dran str.Substring tun (str.LastIndexOf (':') + 1).

Reguläre Ausdrücke sind mächtig, aber versuchen Sie nicht, sie zu verwenden, wenn es einen einfacheren Ansatz gibt.

Verwandte Themen