/ / Espressioni regolari e XML in linea - xml, regex, xml-parsing, inline-xml

Espressioni regolari e XML Inline - xml, regex, xml-parsing, inline-xml

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 № 1

Bene, 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.

  1. questo opera sulle linee con <Location>
  2. salva parte della linea fino a <Location>
  3. 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.