/ / Reguläre Ausdrücke und Inline-XML - XML, Regex, XML-Parsing, Inline-XML

Reguläre Ausdrücke und Inline-XML - XML, Regex, XML-Analyse, Inline-XML

Ich habe eine Inline-XML-Datei (XML-Tags + Text). Ich möchte 4 Wörter vor einem bestimmten Tag erfassen. Zum Beispiel:

Fall 1:

I used to live in <Location>London</Location>.

Fall 2:

I work for <Organization> Microsoft Tech.</Organization>
which is in <Location>London</Location>

Ich möchte in beiden Fällen 4 Wörter vor dem Standort-Tag erfassen.

AUSGABE:

Fall 1:

used to live in

Fall 2:

</Organizattion> which is in

Ist das möglich ?? Kann mir bitte jemand helfen?

Antworten:

1 für die Antwort № 1

Nun, das Einfachste wäre:

((?:S+s+){4}s*)<Location>

Beachten Sie, dass dies in Ihrem zweiten Fall nicht zu dem gewünschten Ergebnis führt, da davon ausgegangen wird, dass Nicht-Leerzeichen durch Leerzeichen begrenzt sind Tech.</Organization> which is in Dort.


0 für die Antwort № 2

Dies ist zwar verrückt und ich würde nicht empfehlen, es zu verwenden, Sie können so etwas mit tun awk:

awk "/<Location>/ {n=gensub("(.*)<Location>.*","\1","g",$0); print gensub(".*[ .]([^ .]+ [^ .]+ [^ .]+ [^ .]+) *$","\1","g",n)} " INPUTFILE

Vielleicht möchten Sie das ändern [^ .] Teile, um richtig zu entscheiden, was Teil eines Wortes ist.

  1. Dies funktioniert auf Linien mit <Location>
  2. Speichert einen Teil der Zeile bis <Location>
  3. gibt die vier gefundenen Wörter aus. (Hinweis Ohne Übereinstimmung wird der zuvor gespeicherte Zeilenteil gedruckt.)

0 für die Antwort № 3

Der Regex, den Sie benötigen, muss auf einem positiven Lookhead basieren. Für Ihre 2 Fälle sind folgende Arbeiten:

/(?:[<>/w]+s*){4}(?=<Location>)/s

Lassen Sie mich wissen, wenn Sie eine Demo mit Regex benötigen.