# [RegEx] Dateigerecht geschriebene Namen parsen



## Surma (9. Aug 2005)

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"_.



```
# 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.


```
#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 (10. Aug 2005)

dafür brauchst du doch keine regexe 

ist doch mit normalen string operationen viel viel einfacher


----------



## Surma (10. Aug 2005)

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...)


----------

