2016-04-12 6 views
1

i mit regex verwirrt ein wenig bin, habe ich eine Linie, die wie etwa wie folgt aussieht:Regex: Ersetzen von Text zwischen Semikolons einen gewissen Zeiten

test = "article;vendor;qty;desc;price1;price2"

und was ich versuche zu Tun ist nur Preis1 zu bekommen. Ich bin derzeit mit dieser Funktion:

Regex.Replace(test, @".*;[^;]*;", "");

, die mir erlauben, price2 zu bekommen, aber ich kann nicht sehen, wie ich price1 isolieren kann.

+0

'var price2 = test.Split (';') [4];'? –

Antwort

1

Haben Sie Man denke nur an einen String.Split() Anruf anstelle Ihrer aktuellen Semikolon getrennte Zeichenfolge in ein Array zu brechen:

var input = "article;vendor;qty;desc;price1;price2"; 
var output = input.Split(';'); 

Und dann könnte man einfach zugreifen Ihren Wert durch seinen Index:

var result = output[4]; // yields "price1" 

Sie werden nur einen Regulären Ausdruck verwenden wollen, wenn Sie ein bestimmtes Muster haben, das Sie verwenden können, um genau das zu finden, was Sie suchen, aber für begrenzte Listen vereinfacht die String.Split() Methode die Dinge (besonders wenn th Es gibt nichts, um den Artikel eindeutig zu identifizieren, den Sie aus der Liste ziehen möchten.

+0

Sie haben völlig Recht, ich frage mich, warum ich zu komplizierten Dingen suchte, danke Ihnen. –

+0

Kein Problem. Reguläre Ausdrücke haben sicherlich ihren Nutzen, aber sie können allgemein zu einem "Hammer" werden, der für Dinge, die ein wenig außerhalb ihres Bereichs liegen, überstrapaziert werden könnte. Also, während du * hier einen benutzen könntest, ist es vielleicht nicht der beste Ansatz :) –

0

Verwenden Sie die folgende regex:

(?:[^;]*;){4}([^;]*); 

und ersetzen Sie das erste Spiel-Gruppe.