Регулярное выражение для извлечения провинции из канадского адреса? - PullRequest
1 голос
/ 11 ноября 2019

Источник, из которого я получаю адреса, является непоследовательным, он может быть 3 разных способов

100 rue des Commandeurs Lévis Québec Canada

100 rue des Commandeurs Lévis Québec G6V7N5 Canada

100 rue des Commandeurs Lévis Québec G6V 7N5 Канада

Первый адрес и часть улицы всегда будут разной длины. «Канада» служит хорошим якорем для нахождения провинции, но проблема в том, что почтовый код иногда разбивается на 2, иногда объединяется, а иногда - нет.

У меня есть решение, но я ищу лучшее. Мое решение состояло в том, чтобы извлечь первые три условия перед Канадой.

RegExExtract Address (\S+)\h(\S+)\h(\S+)\h+Canada

И проанализируйте каждую фразу, чтобы увидеть, есть ли в ней цифра.

RegExtract Phrase 1 (\d)  
   If RegEx Fails, Phrase 1 = Territory  
   If Success, RegExtract Phrase 2 (\d)  
       If RegEx Fails, Phrase 2 = Territory  
       If Success, RegExract Phrase 3 (\d)  
           If RegEx Fails, Phrase 3 = Territory    
           If Success, "Something went wrong"

Это отлично работает, но я предполагаю, что есть лучший способ.

1 Ответ

1 голос
/ 11 ноября 2019

Возможно,

(?i)(\S+)\h*(?:G[A-Z0-9]+\h?[A-Z0-9]+)?\h+Canada

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

(?i)(Québec|Ontario|British Columbia|Montreal|Victoria|Saskatchewan|Calgary|Newfoundland|Nova Scotia|Alberta)(?:\h+)?(G[A-Z0-9]+)?(?:\h+)?([A-Z0-9]+)?\h+Canada$

RegEx Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...