Sie müssen key = value
Paare in beliebigem Text mit den folgenden Regeln kombinieren.
( |\t)+
+
und ein Leerzeichen VAR
oder CONST
key
und value
mit dem Zeichen =
Beispiele:
%Vor%Die folgende Regex stimmt mit solchen Zeilen überein:
%Vor% Nun das Problem: Die Syntax erlaubt Fortsetzungszeilen , z. Wenn auf die obige Zeile die Zeile folgt, die mindestens eine Einrückungssequenz beginnt, wird ( |\t)
(auch ZWEI Leerzeichen oder eine Registerkarte genannt) als Fortsetzungszeile betrachtet und ihr gesamter Inhalt (auch mit führenden Leerzeichen) sollte value
für sein der Schlüssel in der vorherigen Zeile.
Beispiel:
%Vor%z. B. ist die Regex für die Fortsetzungszeile
%Vor%Die Lösung ist einfach mit zeilenbasiertem Ansatz, z. wenn ich den ganzen Text in Zeilen aufteile und Zeile für Zeile abarbeite.
Aber ich suche nach einer (komplexen) Regex (hauptsächlich für Lern- und Benchmarkzwecke), die die key = value-Paare in einer oder mehrzeiliger Form abgleichen könnte. Versucht dies:
%Vor%aber ich habe:
%Vor%Nebenfrage: wie Sie die erweiterten Regexes mit mehreren Zeilen verwenden, wie:
%Vor% wenn die Regex genau das SPACE-Zeichen enthalten muss (z. B. kann nicht das universelle \s
verwendet werden)?
Wenn jemand Hilfe benötigt, ist hier ein Code, der die gewünschte Ausgabe erzeugt (unter Verwendung des zeilenbasierten Ansatzes) und auch die nicht arbeitende regex-based
Lösung.
BEARBEITEN: Verwenden der akzeptierten Antwort und Hinzufügen der gewünschten Erfassungsgruppen, habe Folgendes:
%Vor%EDIT2 Und ja, die auf Regex basierende Lösung ist 34% schneller (zumindest auf meiner HW).
Regex:
%Vor%Der wichtigste Teil ist der letzte Cluster:
%Vor%Beantworten Sie Ihre zweite Frage :
Literale Leerzeichen werden einfach als bedeutender Teil von Regular Expression ignoriert, während x
modifier gesetzt ist, es sei denn, Sie fügen ihn in die Zeichenklassen [ ]
ein und verwenden Quantifizierer [ ]{2,}
, um die Zeitpunkte anzugeben, zu denen sie erscheinen sollen.