正则表达式模式在不验证固定宽度模式的情况下无法使用后向查看

时间:2019-03-19 22:02:52

标签: python regex

我需要找到一个正则表达式,该正则表达式将从下面的字符串中提取城市名称。 字符串的顺序是餐厅名称,地址,城市,电话,美食类型

  • 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 :(得分:0)

您可以使用

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 demo

详细信息

  • (?:(?:Ave|Rd|St|Blvd|Dr|Way|Pl|Ln|Ct)\.|Beach|Way|Walk)-AveRdStBlvdDrWayPlLnCt,后跟.BeachWayWalk
  • \s*-超过0个空格
  • (.+?)-第1组(此值将由.extract返回):除换行符以外的任何一个或多个字符,应尽可能少
  • \s*-超过0个空格
  • \d{3}-\d{3}-\d{4}-3位数字,-,3位数字,-和4位数字。