Forum: PC-Programmierung REGEX Frage zur Ermittlung einer Zeichenkette


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von guelay (Gast)


Bewertung
0 lesenswert
nicht 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.

von Michael (Gast)


Bewertung
0 lesenswert
nicht 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"

von Theor (Gast)


Bewertung
0 lesenswert
nicht 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)
@"[a-zA-Z]+\.[a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+_(?<Name>.+).ZYC_Values"

von Skyper (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.
von Minimalist (Gast)


Bewertung
0 lesenswert
nicht 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:
s = "Aaa.abcd_bcde_jhgk_nameXYZ.ZYC_Values"
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:
s = "Aaa.abcd_bcde_jhgk_nameXYZ.ZYC_Values"
s.split(".")[1].split("_")[-1]

Beispiel ist jetzt nur in Python, keine Ahnung was du für eine Sprache 
benutzt...

von Minimalist (Gast)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.