我正在try 将地址解析为组,我有一个正则表达式:

(^.*?(?:Lane|Street|Boulevard|Crescent|Place|Road|Highway|Avenue|Drive|Circuit|Parade|Telopea|Nicklin Way|Terrace|Square|Court|Close|Endeavour Way|Esplanade|East|The Centreway|Mall|Quay|Gateway|Low Way|Point|Rd|Morinda|Way|Ave|St|South Steyne|Broadway|HQ|Expressway|Street|Castlereagh|Meadow Way|Track|Kulkyne Way|Narabang Way|Bank)),(?:)? ?(.*?),? ?([A-Z]{2,3}),? ?(\d{,4})$

正在捕获和分组这些地址:

139 McKinnon Road, PINELANDS, NT, 829
108 East Point Road, Fannie Bay, NT, 820
3-11 Hamilton Street, Townsville City, QLD, 4810
40 17 Geranium Street, THE GARDENS, NT, 820
Lot 9 Island Point Road, ST GEORGES BASIN, NSW, 2540
316 Sturt Street and 511 Flinders Street, Townsville City, QLD, 4810

但不使用以下格式捕获地址:

1, 3, 5 Demeter Street & 12 Hermes Avenue ROUSE HILL NSW 2155
31 Stephen Street SOUTH TOOWOOMBA QLD 4350

我希望将这些地址分成不同的组,如:

street_address = 1, 3, 5 Demeter Street & 12 Hermes Avenue
subrub = ROUSE HILL
state = QLD
postcode = 4350

如何使用上述表达式捕获这两个地址?这是我的Regex code

推荐答案

您可以使用特定的正则表达式分别匹配四个组中的每一个组,使用以下组:

  • Group 1,包含地址,称为<street_address>:
.*(?:Lane|Street|Boulevard|Crescent|Place|Road|Highway|Avenue|Drive|Circuit|Parade|Telopea|Nicklin Way|Terrace|Square|Court|Close|Endeavour Way|Esplanade|East|The Centreway|Mall|Quay|Gateway|Low Way|Point|Rd|Morinda|Way|Ave|St|South Steyne|Broadway|HQ|Expressway|Street|Castlereagh|Meadow Way|Track|Kulkyne Way|Narabang Way|Bank)
  • Group 2,包含子摩擦,称为<subrub>:
[A-Za-z ]+
  • Group 3,包含状态,称为<state>:
[A-Z]+
  • Group 4,包含邮政编码,称为:
\d+

final regex正是使用可选逗号和强制空格,? 将这些正则表达式串联在一起.

(?P<street_address>.*(?:Lane|Street|Boulevard|Crescent|Place|Road|Highway|Avenue|Drive|Circuit|Parade|Telopea|Nicklin Way|Terrace|Square|Court|Close|Endeavour Way|Esplanade|East|The Centreway|Mall|Quay|Gateway|Low Way|Point|Rd|Morinda|Way|Ave|St|South Steyne|Broadway|HQ|Expressway|Street|Castlereagh|Meadow Way|Track|Kulkyne Way|Narabang Way|Bank)),? (?P<subrub>[A-Za-z ]+),? (?P<state>[A-Z]+),? (?P<postcode>\d+)

查看演示here.

Note:在您的Python代码中,您将能够通过其相应的名称提取每个组.

Python-3.x相关问答推荐

小部件padx和包方法ipadx有什么不同?

如何从包含SPAN文本的标记中获取链接

如何在 python 中将带有时区信息的时间戳转换为 utc 时间

可以在 Python 的上下文管理器中调用 sys.exit() 吗?

ValueError at /register/ 视图authenticate.views.register_user 未返回HttpResponse 对象.它返回 None 相反

在Pandas中,根据另一列中的重复值将数据分组为一列

为什么 Sympy 不能解决我的非线性系统? Python 解释器一直在执行,直到我终止进程

pip 找不到最新的软件包版本

从 h264 帧解析数据包时 PyAV 不一致

RGB 图像中最主要的 colored颜色 - OpenCV / NumPy / Python

使用带有多线程的 win32com

逗号分隔列表的 argparse 操作或类型

virtualenv virtualenvwrapper virtualenv:错误:无法识别的参数:--no-site-packages

在不关心项目的情况下运行生成器功能的更简单方法

try 在 Windows 10 高 DPI 显示器上解决模糊的 tkinter 文本 + zoom ,但担心我的方法不是 Pythonic 或不安全

python setup.py egg_info mysqlclient

如何等待 create_task() 创建的任务完成?

如何在 FastAPI 中的一条路由上捕获任意路径?

清除 PyCharm 运行窗口

print(... sep='', '\t' ) 是什么意思?