2016-06-20 23 views
2

Ich bin nicht so vertraut mit RegEx, wie ich wahrscheinlich sein sollte. Ich suche jedoch nach einem Ausdruck (en), der einer Variante von Werten entspricht.Regulärer Ausdruck/String split

Ich habe eine Liste von Werten (über 30k von ihnen insgesamt):

ABCD1234 
EF56789 
GH123456J 
GH123456JK 
LMN654987P 

Ich brauche die Buchstaben an der Front spalten zu können, ist die Zahl in der Mitte und die Buchstaben am Ende in 3 verschiedene Variablen. Die Werte haben eine unbestimmte Anzahl von Zeichen am Anfang, unbestimmte Anzahl von Zahlen in der Mitte und unbestimmte Anzahl von Buchstaben am Ende.

Jede Hilfe wird geschätzt.

Antwort

3

Sie können einen regulären Ausdruck mit einfangenden Gruppen wie diese statt Spaltung verwenden:

([A-Z]+)([0-9]+)([A-Z]*) 

Working demo

auch wollen, wenn Sie Strings übereinstimmen als Groß- und Kleinschreibung Sie die i Flag verwenden können.

Working demo

Spiel Informationen:

MATCH 1 
1. [0-4] `ABCD` 
2. [4-8] `1234` 
3. [8-8] `` 
MATCH 2 
1. [9-11] `EF` 
2. [11-16] `56789` 
3. [16-16] `` 
MATCH 3 
1. [17-19] `GH` 
2. [19-25] `123456` 
3. [25-26] `J` 
MATCH 4 
1. [27-29] `GH` 
2. [29-35] `123456` 
3. [35-37] `JK` 
MATCH 5 
1. [38-41] `LMN` 
2. [41-47] `654987` 
3. [47-48] `P` 

Außerdem, wenn Sie den leeren Inhalt nicht wollen, dann können Sie diese Regex verwenden:

([a-z]+)([0-9]+)([a-z]+)? 
+0

Das war schnell. Es sieht so aus, als ob die Werte übereinstimmen. Wie würde ich jede Gruppe in C# in eine separate Variable bringen? – user1579943

+0

Das funktioniert gut. Ich verwende Regex.Split (myValue, "([A-Z] +) ([0-9] +) ([A-Z] *)"), um den Wert zu teilen. Vielen Dank! – user1579943

0

Sie einfach durchlaufen könnte über jede Zeile und teile sie unter Verwendung eines ganzen Zahlenblocks als Trennzeichen.

Wenn Sie eine Erfassungsgruppe in die Regex zum Identifizieren des Trennzeichens einschließen, wird das Trennzeichen in das zurückgegebene Array eingeschlossen.

string[] substrings = Regex.Split(originalString, @"([0-9]+)")