Ho un file XML Inline (tag xml + testo). Voglio prendere 4 parole prima di un tag specifico. Ad esempio:
Caso 1:
I used to live in <Location>London</Location>.
Caso 2:
I work for <Organization> Microsoft Tech.</Organization>
which is in <Location>London</Location>
Voglio prendere 4 parole prima del tag di posizione in entrambi i casi.
PRODUZIONE:
Caso 1:
used to live in
Caso 2:
</Organizattion> which is in
È possibile ?? Qualcuno può aiutarmi per favore?
risposte:
1 per risposta № 1Bene, il più semplice sarebbe:
((?:S+s+){4}s*)<Location>
Nota che questo non produrrà il risultato desiderato nel tuo secondo caso, poiché presuppone esecuzioni non di spazi bianchi delimitate da spazi bianchi, quindi produrrebbe Tech.</Organization> which is in
Là.
0 per risposta № 2
Anche se questo è pazzesco e non consiglierei di usarlo, puoi fare qualcosa del genere con awk
:
awk "/<Location>/ {n=gensub("(.*)<Location>.*","\1","g",$0); print gensub(".*[ .]([^ .]+ [^ .]+ [^ .]+ [^ .]+) *$","\1","g",n)} " INPUTFILE
Potresti voler modificare il [^ .]
parti per decidere correttamente cosa fa parte di una parola.
- questo opera sulle linee con
<Location>
- salva parte della linea fino a
<Location>
- stampa le quattro parole che aveva trovato. (Nota senza corrispondenza stamperà la parte di linea precedentemente salvata.)
0 per risposta № 3
La regex di cui hai bisogno deve essere basata su un lookhead positivo. Per i tuoi 2 casi i seguenti lavori:
/(?:[<>/w]+s*){4}(?=<Location>)/s
Fammi sapere se hai bisogno di una demo usando l'espressione regolare sopra.