Как использовать.Сетевое регулярное выражение.Сопоставление для проверки регулярных выражений почтового индекса в базе данных Geonames Country Info

#.net #regex #geonames

#.net #регулярное выражение #geonames

Вопрос:

Приветствую,

Я использую локальную копию базы данных Geonames, включая данные country-info. Мой обычай.Сетевому приложению необходимо проверить почтовые индексы, которые вводят пользователи. Проверка должна выполняться локально и не может использовать доступные веб-службы Geonames. Это требование моего приложения. Я надеюсь, вы сможете помочь мне разобраться, как это сделать.

Внутри базы данных Geonames Country Info есть поле, которое включает регулярное выражение для проверки страны / почтового индекса для соответствующей страны. Вот регулярные выражения, которые содержатся в данных как для Канады, так и для США:

Регулярные выражения в базе данных Geonames:

 Canada: ^([a-zA-Z]d[a-zA-Z]d[a-zA-Z]d)$
USA: ^(d{9})$
  

В моем приложении после завершения проверки я сначала определяю выбранную страну, а затем ищу действительное регулярное выражение почтового индекса для конкретной страны. Затем я использую следующий код .NET / C # для проверки соответствия:

 bool testResult = Regex.IsMatch(postalCode, geonamesRegexForCountry);
  

Когда я ввожу допустимые образцы данных для почтовых / почтовых индексов, проверка соответствия регулярному выражению всегда завершается неудачей. Вот несколько допустимых значений:

 Canada:
   Postal Code: L5R3K6
   Postal Code: L8M1L5

USA:
   Zip Code: 35801
   Zip Code: 72201
  

Тесты всегда завершаются неудачей. Есть идеи, почему? Использует ли база данных Geonames другой «синтаксис регулярных выражений», чем .Используется функция NET Regex.Match() ? Есть предложения о том, как действовать дальше?

Мне нужно проверить почтовые индексы для всех стран, а не только для Канады и США, поэтому я действительно надеюсь, что смогу использовать богатый контент, существующий в базе данных Geonames!

Спасибо за всю вашу помощь!

MomentSurfer

Ответ №1:

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

 Canada: ^([a-zA-Z]d[a-zA-Z]d[a-zA-Z]d)$
USA: ^(d{9})$
  

И, конечно, они могут не соответствовать вашим фактическим данным. Например, версия для США соответствует только почтовым кодам типа 123456789 (ровно 9 цифр), но не 12345 или 12345-6789 . И версия для Канады также не допускает никаких разделителей между символами.