Регулярные выражения и встроенный XML - PullRequest
0 голосов
/ 12 марта 2012

У меня есть встроенный XML-файл (теги xml + текст).Я хочу взять 4 слова перед определенным тегом.Например:

Случай 1:

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

Случай 2:

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

Я хочу взять 4 слова перед тегом местоположения в обоих случаях.

ВЫХОД:

Случай 1:

used to live in

Случай 2:

</Organizattion> which is in

Возможно ли это ??Может кто-нибудь помочь мне?

Ответы [ 3 ]

1 голос
/ 12 марта 2012

Ну, самым простым будет:

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

Обратите внимание, что это не приведет к желаемому результату во втором случае, так как предполагается, что запуски без пробелов разделены пробелами, поэтому там будет Tech.</Organization> which is in.

0 голосов
/ 12 марта 2012

Требуемое регулярное выражение должно основываться на позитивном прогнозе.Для ваших 2 случаев следующие работы:

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

Дайте мне знать, если вам нужна демоверсия с использованием приведенного выше регулярного выражения.

0 голосов
/ 12 марта 2012

Хотя это безумие, и я бы не рекомендовал его использовать, вы можете сделать что-то подобное с awk:

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

Возможно, вы захотите изменить детали [^ .], чтобы правильно решитьявляется частью слова.

  1. это работает в строках с <Location>
  2. сохраняет часть строки, пока <Location>
  3. не напечатает четыре слова, которые былинайденный.( Примечание без совпадения напечатает ранее сохраненную часть строки.)
...