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 № 1Nun, 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.
- Dies funktioniert auf Linien mit
<Location>
- Speichert einen Teil der Zeile bis
<Location>
- 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.