24. oktober 2011 - 16:38Der er
8 kommentarer og 1 løsning
Problem med lower-case action i Mp3tag
Hej,
Har et problem med en action som jeg leger med i Mp3tag. Jeg vil gerne have en action der laver alle ord på 2 bogstaver og under, om til lowercase - med undtagelse af de første ord. Et eksempel kunne være:
In Flames - Walk With Me In Hell
Efter at have kørt den pågældende action skulle tag'et gerne ende ud med at se sådan ud:
In Flames - Walk With me in Hell
-Altså bliver ordene "me" og "in" til lowercase, men ikke "In Flames", da det er første ord.
Jeg har ved hjælp af følgende script næsten fået det til at fungere, men der er en fejl:
\s(a|an|or|in|on|of|to|at|we|my)
-Fejlen viser sig ved at ord der starter med de ovenstående ord, også bliver ændret. Fx. ændres "Together" til "together".
Er der nogen der har en løsning til hvordan jeg løser problemet, så er jeg meget taknemmelig.
Hvis du vil lave det på den måde du gør pt. bliver du nød til at liste ALLE 1-2 ords ord på ALLE de sprog du har tænkt dig at understøtte, og ja, det kan blive en hel del. :)
Nu kender jeg ikke lige Mp3tag, så jeg ved ikke hvor meget af RegEx der er understøttet, men jeg går ud fra at følgende vil kunne bruges:
\s(\w{1,2})(?:\s|$)
Forklaring: \s: En hvilken som helst whitespace karakter. (\w{1,2}): En hvilken som helst kombination af tal og bogstaver på 1 eller 2 karakterer. (?:\s|$): Entent en whitespace karakter eller slutning på titlen.
Der er dog en ting mere du bør overveje, og det er tegn. Hvad hvis du f.eks. har to ord adskilt af et '\' tegn? Der vil ovenstående ikke matche hverken ordet før eller efter. Eller hvis du har en sang der ender på punktum?
Men jeg håber det fik dig tættere på det du skulle bruge. :)
Har lige forsøgt mig med det script du foreslog og det virkede egentlig rigtig godt. Dog oplevede jeg at nogle ord ikke blev ændret, på trods af at de hverken havde punktum eller andre tegn foran, eller efter sig.
Fx. blev sangen "Deep In My Heart" lavet om til "Deep in My Heart" og det samme i lignende sange. -Noget tyder på at den ikke vil ændre to ord efter hinanden.
Jeg erstatter alle mathes, ja. Jeg har set sange hvor det er lykkedes, men det har udelukkende været sange hvor matches var delt af ord på mere end 1-2 bogstaver.
Ah ja, der skal selvfølgelig en rettelse til for at kunne klare dem efter hinanden, da de ellers skal overlappe for at give det rigtige resultat: ((?:\s\w{1,2})*\s\w{1,2})(?:\s|$)
Jeg formoder du bare laver en "ToLower" på match, right?
Er det evt. muligt at få den til at gøre det ved ord med tegn før og efter, eller bliver det for teknisk? Tænker på ord der står i parantes og lignende, nok det du nævner i din første kommentar. :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.