REGEX Frage zur Ermittlung einer Zeichenkette

Gast #6227699
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
@"_(?<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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren