[RegEx] Dateigerecht geschriebene Namen parsen

Status
Nicht offen für weitere Antworten.

Surma

Bekanntes Mitglied
Hossa,

ich selbst bin recht belesen aber unglaublich unerfahren in RegEx ;-)

Nun brauche ich eure Hilfe.
Ich hab ein Verzeichnis mit Wallpapern (schoener Frauen :lol: )
Alle Dateinamen sind im folgenden Format:
vorname_nachname<2-stellige nummer>.jpg
es ist immer alles klein geschrieben.
Nun kann sowohl der Vorname als auch der Nachname ein Doppelname sein a la:
"Cosma Shiva Hagen" oder "Mary-Kate Olsen",
Jedes Leerzeichen in einem Namen wird durch ein _ ersetzt.

Ich moechte folgendes mit einem RegEx erreichen:
  • Abtrennen der 2-stelligen Nummer und des ".jpg".
  • Jedes _ durch ein " " ersetzen.
  • Jeden Buchstaben der am Anfang des Dateinamens, hinter einem Leerzeichen oder hinter einem Bindestrich steht ins Grosse zumzuwandeln.
Ich habe fuer alles einn Ansatz, krieg sie aber nicht ganz zusammen.
Ich benutze Perl (das ist schon ein wichtiger Fakt, denn sonst waere das mit der Gross-Klein-Umwandlung nicht moeglich, danke an \u).

Mein bisheriger Ansaetze:
In $newname liegt zur Zeit etwas a la "mary-kate_olsen01.jpg".


Code:
# Ansatz 1.)


$newname =~ s{
  (                              #Neuen Namen in \1 speichern
    \u[^-0-9][^-0-9]+            # Erstes Zeichen Gross schreiben und den Rest auflesen bis...
    (?:[-_]                      # ...zu einem Unter- oder Binderstrich.
      \u[^-0-9][^-0-9]+          # und wieder Weitermachen.
    )*                           # die letzte Klammerung wiederholen bis...
  )                              # (Speicherung ende)
  [0-9]{2}                       #... die 2-stellige Nummer kommt.
  \,jpg
}
{\1}ix;
Problem: Der Unterstrich wird nicht entfernt bzw. durch ein Leerzeichen ersetzt.

Code:
#Ansatz 2.)


$newname ~= s{
  (                                # Speichern in \1
    \u[^-0-9][^-0-9]+              #Auflesen bis...
    (-\u[^-0-9][^-0-9]+)*          # bis zum naechsten (optionalen) Bindestrich und normal weitermachen. Das so oft wiederholen bis...
  )                                # (Speicherung ende)
   _
}
{\1 }gix;                          #man beachte das Leerzeichen hinter \1

Problem: 2-stellige Ziffer und .jpg-Endung bleibt erhalten.

Habt ihr eine Idee das zusammenzufassen?
Wenns nicht geht (was mir fast so scheint), dann ist es so.

PS: Es interessiert mich hieder weder Performance noch Schoenheit, mich interessiert nur, ob das Problem mit einem RegEx loesbar ist.
 

Bleiglanz

Gesperrter Benutzer
dafür brauchst du doch keine regexe :)

ist doch mit normalen string operationen viel viel einfacher
 

Surma

Bekanntes Mitglied
Wieso sagen das immer alle?
Natuerlich ist das einfacher, das weis ich auch, und ich mache ich es auch,
aber es sit einfaches Interesse, ob und wie ich das alles in eine REgEx bekomme.
(Sorry, das klang sehr schroff...)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben