Регулярное выражение, сопоставляющее несколько записей

#regex

Вопрос:

Я пытаюсь извлечь информацию о местоположении из Франции. Вот пример:

 1#Tunisia#TS#TS#34#9#TS;4#Virsac, Aquitaine, France#FR#FR97#45.0333#-0.45#-1477568;4#Gironde, Aquitaine, France#FR#FR97#44.584#-0.089244#-1429418
 

По сути, это город, его регион и его страна. Следовательно, я сделал это:

 ^[2-5]#(.*?)#FR#
 

В результате получается:

 Gironde, Aquitaine, France
 

Это правильно извлекает город/регион/страну, но извлекает только один из них. Можно ли извлечь несколько записей ? Ожидаемый результат будет:

 Virsac, Aquitaine, France
Gironde, Aquitaine, France
 

Заранее спасибо,

Ответ №1:

Основываясь на вашем текущем шаблоне, вам необходимо заменить ^ привязку на конструкцию границы слова (чтобы убедиться 2 , 3 что , 4 , или 5 совпадают как отдельные числа) и заменить .*? на [^#]* , чтобы запретить совпадение крайнего правого вхождения шаблона завершающего разделителя.

То есть вы можете использовать

 b[2-5]#([^#]*)#FR#
 

Смотрите демонстрацию регулярных выражений. Подробные сведения:

  • b — граница слов
  • [2-5] — цифра от 2 до 5
  • # — а # чар
  • ([^#]*) — Группа 1: ноль или более символов, отличных от #
  • #FR# #FR# веревочка.