Hallo zusammen, Ich habe das folgende Text als Beispiel: Aaa.abcd_bcde_jhgk_nameXYZ.ZYC_Values Ich möchte per Regex und Gruppierungskonstrukt auf den Namen zugreifen, d.h. die Zeichenkette "nameXYZ". Ich habe das folgende Regex: @"_(?<Name>.+).ZYC_Values" var name = match.Groups["Name"].Value; //würde "bcde_jhgk_nameXYZ.ZYC" zurückgeben. Wie baut man den Regex damit ich als name "nameXYZ" zurück bekommme ? Die Zeichenketten zwischen den Sonderzeichen können beliebig lang sein.
@"_(?<Name>[^_]+).ZYC_Values" Ab dem Unterstrich alles matchen was nicht Unterstrich ist. Gefolgt von .ZYC_Values. Btw den Punkt solltest du auch noch escapen, da er sonst auch auf andere Zeichen matcht... @"_(?<Name>[^_]+)\.ZYC_Values"
guelay schrieb: > [...] > > Aaa.abcd_bcde_jhgk_nameXYZ.ZYC_Values > > Ich möchte per Regex und Gruppierungskonstrukt auf den Namen zugreifen, > d.h. die Zeichenkette "nameXYZ". > > Ich habe das folgende Regex: @"_(?<Name>.+).ZYC_Values" > > var name = match.Groups["Name"].Value; //würde "bcde_jhgk_nameXYZ.ZYC" > zurückgeben. > [...] Das hängt damit zusammen, dass der längste Match zurückgeliefert wird. Du kannst den Suchausdruck gezielter gestalten, in dem Du die '.' und '_' berücksichigst. Etwa: (nicht getestet aber so ungefähr müsste es dem nahekommen)
1 | @"[a-zA-Z]+\.[a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+_(?<Name>.+).ZYC_Values" |
Zum testen und "schauen" bieten sich einige Testseiten für Reguläre Ausdrücke an... dort sieht man dann, wo es passt und wo nicht. Hier, diese nehme ich gerne... https://regex101.com/
Beitrag #6227881 wurde von einem Moderator gelöscht.
Beitrag #6269202 wurde von einem Moderator gelöscht.
guelay schrieb: > Ich habe das folgende Regex: @"_(?<Name>.+).ZYC_Values" Bei deinem Ansatz (jetzt mal ungeachtet der Fehler) muss der String auf ".ZYC_Values" enden. Wenn das schon sicher feststeht, braucht es kein Regex mehr. Dann würde ich den String um die letzten 11 Zeichen kürzen, und rückwärts bis zum nächsten "_" suchen. Fertig... in Python bspw:
1 | s = "Aaa.abcd_bcde_jhgk_nameXYZ.ZYC_Values" |
2 | s[:-11].split("_")[-1] |
Selbst wenn der letzte Substring hinter dem Punkt eine Variable länge hat, ist es m.M.n intuitiver und besser verständlich einfach rückwärts zu suchen:
1 | s = "Aaa.abcd_bcde_jhgk_nameXYZ.ZYC_Values" |
2 | s.split(".")[1].split("_")[-1] |
Beispiel ist jetzt nur in Python, keine Ahnung was du für eine Sprache benutzt...
Sorry, das 2. Beispiel war gemogelt, weil streng genommen von vorne gesucht wird. Funktioniert aber auch, solange vorne nicht weitere Punkte "." eingefügt werden. Für die Peniblen unter euch: s.split(".")[-2].split("_")[-1] So wir der Substring VOR dem letzten Punkt genommen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.