Регулярное выражение для проверки поля адреса
Я пытаюсь написать регулярное выражение, которое облегчает адрес, пример 21-big walk way или 21 st. Elizabeth's drive я придумал следующее регулярное выражение, но я не слишком стремлюсь к тому, как включить все символы (буквенно-цифровой, пробел, полная остановка, Апостроф)
"regexp=^[A-Za-z-0-99999999'
7 ответов:
Дамы,
Смотрите ответ на этот вопрос при проверке адреса регулярным выражением: регулярное соответствие адреса улицы
Проблема в том, что уличные адреса настолько различаются по форматированию, что их трудно кодировать. Если вы пытаетесь проверить адреса, найти, если один из них не является допустимым, основываясь на его формате, очень трудно. Это вернет следующий адрес (253 N. Cherry St.), что-нибудь с тем же форматом:
\d{1,5}\s\w.\s(\b\w*\b\s){1,2}\w*\.Это позволяет 1-5 цифр для дома число, пробел, символ, за которым следует точка (для N. или S.), 1-2 слова для названия улицы, заканчивающиеся аббревиатурой (например, st. или rd.).
Поскольку регулярное выражение используется, чтобы увидеть, соответствуют ли вещи стандарту или протоколу (который вы определяете), вы, вероятно, не захотите учитывать адреса, указанные выше, особенно первый с тире, поскольку они не очень стандартны. вы можете изменить мой приведенный выше код, чтобы разрешить их, если хотите-вы можете добавить
(-?)Чтобы разрешить тире но не требуется.
Кроме того, http://rubular.com/ - это быстрый и интерактивный способ изучения регулярных выражений. Попробуйте это с адресами выше.
В случае, если у вас нет фиксированного формата для адреса, как указано выше, я бы использовал выражение regex только для исключения символов, которые не используются в адресе (например, специализированные sybmols - &(%#$^). Результатом будет:
[A-Za-z0-9'\.\-\s\,]
Просто добавить к ответуSerzas (так как не хватает повторений для комментариев). алфавиты и цифры могут быть эффективно заменены на \w для слов. Кроме того, Апостроф, запятая, точка и дефис не обязательно должны иметь обратную косую черту. Мое требование также включало передние и задние косые черты так \ / и, наконец, пробелы с \s. рабочее регулярное выражение для меня, как таковое, было:
pattern: "[\w',-\\/.\s]"
Я успешно использовал ;
Регулярное выражение попытается найти результат, если его нет, оно перейдет к следующему варианту. Если результат не найден,то ни один из 4-х форматов не присутствует.Dim regexString = New stringbuilder With regexString .Append("(?<h>^[\d]+[ ])(?<s>.+$)|") 'find the 2013 1st ambonstreet .Append("(?<s>^.*?)(?<h>[ ][\d]+[ ])(?<e>[\D]+$)|") 'find the 1-7-4 Dual Ampstreet 130 A .Append("(?<s>^[\D]+[ ])(?<h>[\d]+)(?<e>.*?$)|") 'find the Terheydenlaan 320 B3 .Append("(?<s>^.*?)(?<h>\d*?$)") 'find the 245e oosterkade 9 End With Dim Address As Match = Regex.Match(DataRow("customerAddressLine1"), regexString.ToString(), RegexOptions.Multiline) If Not String.IsNullOrEmpty(Address.Groups("s").Value) Then StreetName = Address.Groups("s").Value If Not String.IsNullOrEmpty(Address.Groups("h").Value) Then HouseNumber = Address.Groups("h").Value If Not String.IsNullOrEmpty(Address.Groups("e").Value) Then Extension = Address.Groups("e").Value
Регулярное выражение-очень плохой выбор для такого рода задач. Попробуйте найти веб-сервис, базу данных адресов или продукт, который может очистить данные адресов.
Связанные:
Регулярное выражение для простой проверки адреса
^[#.0-9a-zA-Z\s,-]+$Например, для случая совпадения адресов
#1, North Street, Chennai - 11Например, для адреса, не соответствующего случаю
$1, North Street, Chennai @ 11
Это сработало для меня:
\d+[ ](?:[A-Za-z0-9.-]+[ ]?) +(?:Проспект|Переулок|Дорожный|Бульвар|Диск|Улица|Ул.|Др|РД|Бул|ЛН|Ст).?
Источник: https://www.codeproject.com/Tips/989012/Validate-and-Find-Addresses-with-RegEx
Comments