2017-01-27 14 views
1

У меня есть адреса блоков, таких какRegex чтобы соответствовать ZIP в адрес

10004 South 152nd St. #A 
Omaha 
Nebraska 
68138 United States 

Я пытаюсь найти регулярное выражение, которое будет соответствовать ZIP код только и не подобрать номер на улице.

Я пробовал \ d +, но он поднимает первый набор чисел на улице. Примерно 1000 адресов.

Пожалуйста посоветуйте

Благодарности

+1

Многие из нас не американцы. Можете ли вы рассказать словами, как вы знаете, что '10004' не является почтовым индексом, а' 68138'? – Amadan

+1

Является ли ZIP всегда рядом с США? Попробуйте '\ d + (? = \ S + United States)'. –

+0

Это прекрасно работает, Wiktor. Большое спасибо за вашу оперативную помощь. –

ответ

2

Если все адреса являются те, США, вы можете соответствовать номерам, которые следуют с 1+ непечатаемых и США слова.

\d+(?=\s+United States) 

См regex demo

(?=\s+United States) положительный предпросмотр потребует пробельные и США после 1+ цифр (\d+), но не возвращает этот текст в значении матча. В качестве альтернативы вы можете использовать группу захвата:

(\d+)\s+United States 

И возьмите значение группы 1.

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

+0

Большое спасибо, Wiktor. Я изучаю RegEX, так что это огромная помощь для меня. –

+1

Если у вас есть другие контекстные маркеры, вы можете включить их в качестве альтернатив: '\ d + (? = \ S + (?: United States | U \ .S \.))' Или '(\ d +) \ s + (?: United States | U \ .S \.) '(Чтобы также соответствовать цифрам до' US'). –

+0

Еще раз спасибо, Wiktor –