#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