2016-03-23 4 views
-1

Ich habe eine recht lange Liste von Künstlern mit einem Lied von ihnen kombiniert. Einige Beispiele sind im Folgenden aufgeführt:Regex Artist-Titel

30 Seconds To Mars - Savior 
3-nen E-Gumi Utatan - Seishun Satsubatsuron (TV) 
7!! - Start Line (TV) 
ABBA - Estoy soñando 
AKINO with bless4 - Kimi no Shinwa ~ Aquarion Dai Ni Shou (TV) 
µ's - Angelic Angel (TV) 

Jeder Name wie dieser Liste formatiert ist habe ich versucht, alle möglichen Kombinationen hinzuzufügen.

Ich brauche eine Liste aller Künstler und Songs getrennt. Wie würde ich den Künstler extrahieren, damit ich das in eine andere Datei kopieren kann. Und wie würde ich das Lied extrahieren, damit ich es in eine andere Datei kopieren kann.

Wie gesagt ist das Format Artist - Lied

ich diese Regex atm versucht: ^.*(-) Aber diese wählt die - Zeichen zu

+2

In Ihrem zweiten - was ist, wenn Sie einen Song-Titel mit '-' in er haben? wie unterscheidest du das eine und das andere? –

+0

Wenn der Satz wäre: "Test - Pizza - Test" Die Ausgabe sollte "Pizza - Test" sein. Also ich denke, es sollte auf den ersten Strich (-) mit Leerzeichen um ihn herum aussehen. – Baklap4

+1

Duplizieren Sie Ihre Datei für den Interpreten und die Songliste - verwenden Sie in beiden Fällen '^ (. *?) - (. *)' Als Suchmuster, ersetzen Sie zuerst durch '\ 1', in der zweiten durch' \ 2' –

Antwort

1
^(.*?)\s-\s(.*?)$ 

Hier ist die DEMO

+0

Beachten Sie, dass dies nicht garantiert * was * Bindestrich wird auf (wenn ein Liedtitel einen Bindestrich mit Leerzeichen hat). Regex-Interna machen es wahrscheinlich immer zum Letzten. Andernfalls könntest du es in '^ (. *?) \ S- \ s ([^ -]?) $' Ändern. Das sollte garantieren, dass es das letzte ist. – ClasG

+0

@ClasG Sie können steuern, ob der erste oder der letzte mit einem? in nur einer der Fanggruppen. Abgesehen davon, das ist immer eine Einschränkung. – Nyerguds

+0

@Nyerguds Wahr. Das ist eine andere Art, es zu lösen. – ClasG

0

Ist nicht schwer scheinen; Sie müssen nur die Leerzeichen in Ihre Regex einfügen, entweder als Literale oder als Regex \s.

Auch Ihre Fanggruppe in Ihrer Regex ist um das - Zeichen. Ich nehme an, Sie müssen stattdessen den Künstler und Titel erfassen.

^(.*?)\s+-\s+(.*?)$

Dann ersetzen Sie einfach \1 für den Künstler und \2 für den Titel verwenden.

Für genau das, was Sie tun möchten ... einfach zwei Kopien der Datei, und ersetzen Sie durch \1 in einer Kopie für die Künstler und \2 in der anderen für die Titel.

0

Diese Regex .+(?=-) wird alles bis zum letzten Bindestrich bekommen. (?!<-)[^-]+$ alles danach.

prüfen this example, die die zwei und bekommt Song in Capture-Gruppe 1 und Künstler in Nummer 2.

Grüße kombiniert.

+0

Es gibt keine Garantie, dass der Songtitel keine Bindestriche enthält. Die einzige Konstante scheint zu sein, dass das Trennzeichen das Literal "Leerzeichen, Bindestrich, Leerzeichen" ist. – Nyerguds

+0

Ja, aber das funktioniert * bis zu * und * vom * letzten ** Bindestrich. So ... Es wird funktionieren :) – ClasG

+0

Immer noch nicht das Format eines Bindestrichs umgeben von Leerzeichen von der Frage zur Verfügung gestellt. Es schlägt fehl, sobald ein Liedtitel einen Bindestrich enthält. Es ist nur das falsche Kriterium. – Nyerguds