Шаблон регулярных выражений не работает, если смотреть назад без проверки шаблона фиксированной ширины - PullRequest
1 голос
/ 20 марта 2019

Мне нужно найти регулярное выражение, которое будет извлекать название города из строк ниже.Порядок строки - название ресторана, адрес, город, телефон, тип кухни

  • Chinois on Main 2709 Main St. Santa Monica 310-392-9025 Pacific New Wave
  • Benita's Frites 1433 Third St. Promenade Santa Monica 310-458-2889 Fast Food
  • Indo Cafe 10428 1/2 National Blvd. LA 310-815-1290 Indonesian
  • Diaghilev 1020 N. San Vicente Blvd. W. Hollywood 310-854-1111 Russian
  • Jody Maroni's Sausage Kingdom 2011 Ocean Front Walk Venice 310-306-1995 Hot Dogs

Я пробовал это регулярное выражение, но оно не работает:

zagat['city'] = zagat['raw'].str.extract("""
    ((?<=Ave.|Rd.|St.|Blvd.|Dr.|Way.|Pl.|Ln.|Ct.|Beach|Way ).+(?=...-...-....))
    """, expand=True)

Можете ли вы помочь?

1 Ответ

0 голосов
/ 20 марта 2019

Вы можете использовать

rx = r'(?:(?:Ave|Rd|St|Blvd|Dr|Way|Pl|Ln|Ct)\.|Beach|Way|Walk)\s*(.+?)\s*\d{3}-\d{3}-\d{4}'
zagat['city'] = zagat['raw'].str.extract(rx, expand=False)

См. Демоверсию regex

Подробности

  • (?:(?:Ave|Rd|St|Blvd|Dr|Way|Pl|Ln|Ct)\.|Beach|Way|Walk)- Ave, Rd, St, Blvd, Dr, Way, Pl, Ln или Ct с последующими . или Beach, Way илиWalk
  • \s* - 0+ пробелов
  • (.+?) - Группа 1 (это значение будет возвращено .extract): любой один или несколько символов, кроме символов разрыва строкикак можно меньше
  • \s* - 0+ пробелов
  • \d{3}-\d{3}-\d{4} - 3 цифры, -, 3 цифры, - и 4 цифры.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...