регулярное выражение для выбора только почтового индекса

#regex

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

Вопрос:

,Ray Balwierczak,4/11/2017,,895 Forest Hill Rd, Апалачин, Нью-Йорк,13732, y,,

я хочу выбрать только 13732 из строки. Я придумал это регулярное выражение

(d)(s*d )*(, y,,)

Но он также выбирает ,y,, .если я удалю эту часть из регулярного выражения, регулярное выражение также станет действительным для даты. пожалуйста, помогите мне в этом.

Ответ №1:

Как правило, если вы хотите сопоставить что-то, не захватывая его, используйте lookaround нулевой длины (lookahead или lookbehind). В вашем случае вы можете использовать lookahead:

 (d)(s*d )*(?=,y,,)
 

Синтаксис (?=<stuff>) означает «за которым следует <stuff> , не сопоставляя его».

Более подробную информацию о поиске можно найти в этом руководстве.

Ответ №2:

Регулярное выражение: D*(d{5})D*

Объяснение: сопоставьте 5 цифр, окруженных нулем или более не-цифр с обеих сторон. Затем вы можете извлечь группу, содержащую совпадение.

Вот код на python:

 import re
string = ",Ray Balwierczak,4/11/2017,,895 Forest Hill Rd,Apalachin,NY,13732,y,,"
search = re.search("D*(d{5})D*", string)
print search.group(1)
 

Вывод:
13732