RegEx Segmente ein- und ausschließen

CopWorker

Erfahrenes Mitglied
Hallo zusammen,

besteht die Möglichkeit mit RegEx aus einem Text Segmente einzuschließen und andere auszuschließen?

C#:
string1 = "COM-ALM1_BIT10";
string2 = "COM-ALM2_BIT10";
string3 = "COM-ALM1_BITcodiert";
string4 = "COM-ALM2_BITmummer10";
string5 = "COM-CMD_Request";

Eine Match soll zustande kommen wenn im Text "COM" steht gefolgt von einem "-".
Dann soll als zweites Segment "ALM" stehen gefolgt von einer Zahl auch mehrstellig (z.B. 1, 2, 21 ..) und gefolgt von einem "_".
Jetzt kommt was ich nicht hinkriege.
Am Schluss darf nicht "BIT" unmittelbar gefolgt von einer Zahl (auch mehrstellig) stehen.
Ein Match soll erfolgen bei string3 und bei string4.

Vielen Dank.
Grüße von CopWorker
 

CopWorker

Erfahrenes Mitglied
Hallo,
ich habe mal ein Pattern zusammenstellt.

C#:
strPattern = @"COM-ALM?[\d]{1,2}_(?!BIT?[\d]{1,2})";

Das geht, aber nur bedingt.
Der Match kommt zustande beim string4 wird aber nicht komplett zurückgegeben.
Zurück kommt "COM-ALM2_" .
Was muss ich am Pattern machen, dass der ganze Text im Match zurückkommt?
So etwa: "COM-ALM2_BITmummer10"

Vielen Dank
Grüße von CopWorker
 

CopWorker

Erfahrenes Mitglied
Hallo Spyke,

ein Match.success darf nur erfolgen wenn 'BIT' mit einer nachfolgenden Zahl nicht in Suchstring vorkommt.
Das ^ und $ bewirken doch, dass alles im Match angezeigt wird. oder.

Gruß CopWorker
 

Spyke

Premium-User
Das
^ steht für suchen von beginn an (wenn es ganz am beginn eines regex steht)
$ für suchen bis zum ende
^ innerhalt von [] steht dafür das die angegebenen zeichen im [] nicht im zu prüfendem Textvorkommen dürfen

der regex von mit schaut nach COM-ALM mit zahlen, gefolgt von _BIT, worauf das darauf folgende zeichen nach BIT nicht zwischen 0 und 9 sein darf.
 

CopWorker

Erfahrenes Mitglied
Hallo Zvoni,
kann man das Vorkommen von "BIT" und folgender Zahl (1 bis 2 stellig) nicht ausschließen?
Wenn "BIT" von einem Text und danach mit einer Zahl gefolgt ist, dann bitte Match zulassen.
RegExPattern = "(COM-)(ALM\d+_)(BIT\D.+)"

"COM-ALM11_BIT10"
"COM-ALM2_BIT10"
"COM-ALM1_BITcodiert" //Match.success == true
"COM-ALM2_BITmummer10" //Match.success == true
"COM-CMD_Request"

Bei folgendem Text sollte auch ein Match.success == true sein. Ist aber == false.
"COM-ALM2_EM1000_1"

Grüße von CopWorker