REGEX Frage zur Ermittlung einer Zeichenkette

Gast #6227699
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.
Gast #6227707
@"_(?<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"
Gast #6227722
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"
Beitrag #6227881 wurde von einem Moderator gelöscht.
Beitrag #6269202 wurde von einem Moderator gelöscht.
Gast #6269466
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...
Gast #6269479
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.