Mam plik XML Inline (znaczniki xml + tekst). Chcę pobrać 4 słowa przed konkretnym tagiem. Na przykład:
Przypadek 1:
I used to live in <Location>London</Location>.
Przypadek 2:
I work for <Organization> Microsoft Tech.</Organization>
which is in <Location>London</Location>
Chcę pobrać 4 słowa przed tagiem lokalizacji w obu przypadkach.
WYDAJNOŚĆ:
Przypadek 1:
used to live in
Przypadek 2:
</Organizattion> which is in
Czy to możliwe ?? Czy ktoś może mi pomóc?
Odpowiedzi:
1 dla odpowiedzi № 1Cóż, najłatwiej byłoby:
((?:S+s+){4}s*)<Location>
Zauważ, że nie przyniesie to pożądanego rezultatu w twoim drugim przypadku, ponieważ zakłada, że spacje bez białych znaków są rozdzielane białymi znakami, więc dałoby to Tech.</Organization> which is in
tam.
0 dla odpowiedzi nr 2
Chociaż jest to szalone i nie polecam go używać, możesz zrobić coś takiego z awk
:
awk "/<Location>/ {n=gensub("(.*)<Location>.*","\1","g",$0); print gensub(".*[ .]([^ .]+ [^ .]+ [^ .]+ [^ .]+) *$","\1","g",n)} " INPUTFILE
Możesz zmodyfikować [^ .]
części, aby właściwie zdecydować, co jest częścią słowa.
- działa na liniach z
<Location>
- zapisuje część linii do
<Location>
- wypisuje cztery słowa, które odnalazł. (Uwaga bez dopasowania wypisze wcześniej zapisaną część linii.)
0 dla odpowiedzi № 3
Wyrażenie, którego potrzebujesz, musi być oparte na pozytywnym wzroku. Dla twoich 2 przypadków następujących prac:
/(?:[<>/w]+s*){4}(?=<Location>)/s
Daj mi znać, jeśli potrzebujesz wersji demo, używając powyższego wyrażenia regularnego.