2017-01-15 5 views
1

Ich versuche, eine gute regex zu finden, mit TextWrangler zu verwenden Aufgabenbeschreibungen in ein Rememberthemilk.com Format zu analysieren: so dass eine Zeile wie:RegEx Erfassen von sich unendlich wiederholenden Mustern mit spezifischen Rückreferenzen?

Example task section 1 section tomorrow section tagone tagtwo tagthree tagfour 

whould das RTM-Format konvertieren in:

Example task !1 ^tomorrow #tagone #tagtwo #tagthree #tagfour 

Das bringt mich in die Frage, wie man ein sich unendlich wiederholendes Muster mit der richtigen Syntax in den Rückreferenzen erfasst?

Ich habe diese regex versucht:

^([\w ]+) section (\d) section (\w+) section ((\w+))+$ 

, die das Format des eingegebenen Textes zu erfassen scheint, aber ich weiß einfach nicht, wie die Umwandlung in den Rückreferenzierungen zu machen?

\1 !\2 ^\3 #(???) 

Wie erreiche ich das?

+0

Jedes Zeichen im Ersetzungsstring wird genau einmal verwendet. Es gibt keine Möglichkeit, das "#" für jedes Spiel der letzten Gruppe zu wiederholen. Wenn es immer die gleiche Anzahl von Tags gäbe, könnten Sie sie individuell anpassen, aber ich nehme an, dass das nicht der Fall ist. – jasonharper

+0

Ich glaube nicht, dass Sie dies nur mit Ersatz und Rückreferenzen erreichen können. Wenn Sie dies in einer vollständigeren Programmiersprache tun, können Sie dies tun (z. B. kann C# auf alle Captures für eine bestimmte Gruppe zugreifen). Beispiel: https://gist.github.com/Porges/9ba3b7f94f2c14e20feb16c984406e5a#file-example-cs – porges

Antwort

0

Capture quantifizierte Konstrukte, nicht quantifizieren Capture-Gruppen.

hier nutzen wir auch „Gruppierung nur“ Pars (keine Capture-Gruppe) auf dem inneren Abschnitt und erfassen die Außen ein sauberes Ergebnis zu erhalten:

([\w ]+) section (\d) section (\w+) section ((?:\w+\s?)+) 

Sie die wiederholten constuct innerhalb() der Erfassung wollen Es macht keinen Sinn "die Gruppe zu wiederholen", in den meisten Suchmaschinen wird nur das letzte Ergebnis der Gruppe erfasst. (Obwohl einige regex Motoren eine wiederholte Capture-Gruppe ermöglicht, alle Unter matches (.NET zum Beispiel zu erinnern))

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

Verwandte Themen