Регулярное выражение на основе адреса в любом порядке

#java #regex

Вопрос:

У меня есть регулярное выражение, основанное на формате адреса : ([0-9-]*) ?([p{L}*,. '-]*) ?([0-9 ]*) ?([p{L}*,. '-]*) ([0-9]{5}) ?([p{L}*,. '-]*)

Он может совпадать с этим : 16 Rue du Pont Louis-Philippe 75000 Париж

Но я бы тоже хотел, чтобы это регулярное выражение соответствовало этому формату : 75000 Paris 16 Rue du Pont Louis-Philippe

Кто-нибудь может мне помочь, пожалуйста ?

Ответ №1:

В шаблоне есть много дополнительных деталей. Вы можете сделать последние 2 группы необязательными, но вам придется изменить кванторы на 1 или более раз , чтобы предотвратить частичное совпадение (или добавить ^ в шаблон для утверждения начала строки).

 ([0-9-] ) ([p{L}*,. '-] ) ([0-9 ] ) ([p{L}*,. '-] )(?: ([0-9]{5}) ([p{L}*,. '-] ))?
 

Демонстрация регулярных выражений

Комментарии:

1.Спасибо, что это работает ! Но у меня есть еще одна проблема, у меня другой шаблон обращения : 16 Rue du Pont Louis-Philippe 75000 Paris 75000 Paris 16 Rue du Pont Louis-Philippe 16 Rue du pont Louis-Philippe 1er 75000 Paris 75000 Paris 16 Rue du pont Louis-Philippe 1er

2. @Octaz-это все вариации? Сопоставление адреса может быть довольно сложным из-за всех различных обозначений.