2016-08-04 34 views
-1

Ich habe eine große .yml Übersetzungsdatei, in der ich die Schlüssel und die Werte invertieren möchte.Wie invertiert man Schlüssel und Werte in einer YAML-Datei (Schlüssel: Wert)

was ich habe:

some english sentence : une phrase en francais 
another one : une autre 

was Ich mag würde bekommen:

une phrase en francais : some english sentence 
une autre : another one 

Ich bin sicher, es könnte ein paar einfache regex, dies zu tun, aber Ich konnte nicht herausfinden, wie man das macht ...

Ich suche nicht ein Skript, nur eine Regex

+0

alle Ihre Schlüssel und Werte so einfach? Insbesondere hat keiner der Sätze ein ':' eingebettet? Wie die gültige YAML "" Er sagte: "Ein englischer Satz": "Il dit:" une phrase en francais "" – Anthon

+0

Ich hatte nur eine mit Doppelpunkten, ich habe es manuell geändert. das ist in der Tat etwas zu kümmern über –

+1

Also nachdem wir alle übereingestimmt, dass [Parsing XML mit Regex ist eine schlechte Idee] (http://StackOverflow.com/a/1732454/347964), versuchen wir nun, YAML mit Regex stattdessen zu parsen? – flyx

Antwort

2

Die Regex:

(.*)\s+:\s+(.*) 

Die Substitution:

$2 : $1 

Demo: https://regex101.com/r/lU6eM4/2

+0

Danke, ich musste 1 und 2 umkehren, aber es ist genau das, wonach ich gesucht habe! –

+0

Hoppla, tut mir leid. Fixed –

2

Sie mit einem einfachen regulären Ausdruck starten:

^(.*):(.*)$ 

^= Zeilenanfang

= erstes Spiel Gruppe

(. *): = Catch: (. *)

= zweites Spiel Gruppe

$ = end of line

für exemple Notepad ++ können Sie tun:

Suche: ^(.*):(.*)$

ersetzen \2:\1

wo \2: Inhalt der zweiten Partie Gruppe und wo \1: Inhalt der ersten Partie Gruppe

Diese Methode funktioniert nur, wenn Sie Satz enthalten keine :

+0

Danke, das ist schön, Sie geben eine Erklärung! –