python - 在不验证固定宽度模式的情况下,正则表达式模式无法使用后视功能

标签 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 快餐
  • 印度咖啡馆 10428 1/2 National Blvd。 LA 310-815-1290 印度尼西亚语
  • Diaghilev 1020 N. San Vicente Blvd. W. 好莱坞 310-854-1111 俄语
  • 乔迪·马罗尼 (Jody Maroni) 的香肠王国 2011 年威尼斯海滨漫步 310-306-1995 热狗

我尝试了这个正则表达式,但它不起作用:

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

你能帮忙吗?

最佳答案

您可以使用

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)\.|海滩|Way|步行) - Ave大道博士PlLnCt 后跟 .BeachWay步行
  • \s* - 0+ 个空格
  • (.+?) - 第 1 组(该值将由 .extract 返回):除换行符之外的任何一个或多个字符,最少为可能的
  • \s* - 0+ 个空格
  • \d{3}-\d{3}-\d{4} - 3 位数字,-,3 位数字,- 和 4 位数字。

关于python - 在不验证固定宽度模式的情况下,正则表达式模式无法使用后视功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55250643/

相关文章:

python - 对字符串列表执行算术运算

python - 子进程.Popen : cloning stdout and stderr both to terminal and variables

python - Django 导入错误 : cannot import name 'python_2_unicode_compatible'

python-3.x - 正则表达式匹配字符串中的数字零

python - numpy矩阵中相邻元素的高效识别

python - 无法直接从 Github 在 Google Colab 中安装 Sk-learn (scikit-learn)

regex - 重写 URL 并使新 URL 显示在地址栏中

html - HTML 模式中的正向前瞻?

javascript - Rubular 与 javascript 正则表达式捕获组

java - 在Java中使用模式、匹配器