python - 为什么 RegExr.com 显示的结果与我得到的结果不同?
问题描述
我正在使用专有数据集,并且正在测试正则表达式模式以在文本语料库中查找地址。
为了找到地址,我一直在使用以下结构进行地址搜索:
建筑物编号:例如 Unit 502
街道类型:例如 Park Way
城市/城镇:例如 伯明翰
县:例如 West Midlands
邮政编码:例如 B42 7NR
注意这些是英国地址
使用 RegExr.com,我测试了各种模式并得到了它并在代码中实现了它,如下所示:
def parse_results(string):
space = r"([\s\t]{0,5})"
building_type = r"(([Uu]nit|[Ss]tudio|[Ff]lat)?)"
street_type = (r"((\d+)(\&|\-)*(\d*)(\w*)(\w*)(\s*)(\w*)(\s*)(\w*)(\s*)"
r"([Ee]nd|[Gg]reen|[Cc]auseway|[Cc]heapside|[Cc]rescent|"
r"[Ss]treet|[Ll]ane|[Ww]alk|[Rr]oad|[Aa]venue|[Dd]rive|"
r"[Pp]ark|[Ww]ay|[Pp]lace|[Pp]arade|[Ii]ndustrial"
r"[Ee]state|[Tt]rading [Ee]state|[Hh]ouse|[Gg]reen))")
line_1 = r"(\w*)"
line_2 = r"(\w*)"
line_3 = r"(\w*)"
line_4 = r"(\w*)"
line_5 = r"(\w*)"
postcode = r"(([A-Z0-9][A-Z0-9][A-Z0-9]?[A-Z0-9]? {1,2}[0-9][A-Z]{2}))"
pattern = re.compile(rf"({building_type}{space}{street_type}{space}"
rf"{line_1}{space}{line_2}{space}{line_3}{space}"
rf"{line_4}{space}{line_5}{space}{postcode})")
try:
matches = pattern.finditer(string)
for match in matches:
address = re.sub(r"\s+", r" ", match.group(1))
return address
except Exception as e:
return (f"Error looking for address, exception {e}")
尽管在 RegExr.com 上显示它应该获取某些地址,但它错过了某些地址。示例包括:
- 6B Winterstroke Road Weston-Super-Mare Avon BS23 3YT
- 4 阿姆斯特朗广场米尔顿凯恩斯白金汉郡 MK8 0AU
- 单元 11 Buttlands Industrial Estates Totnes Road Ipplepen Newton Abbot Devon TQ12 5UE
我不知道是否发生了我不确定的 Pythonic 事件。对此的任何想法将不胜感激。谢谢!
解决方案
推荐阅读
- python - MATLAB中是否有与纤维测量等效的Python函数?
- python - Pytorch,将顺序输出转换为二进制的标准层?
- java - 使用 Primefaces 数据表显示嵌套列表
- javascript - 在所有回调完成后,如何处理多个 Google Places API 结果?
- kotlin - EnableReactiveMethodSecurity 用于带有协程的反应式 kotlin 应用程序
- java - javac 无法编译上限通配符,但 Eclipse 可以
- php - CODEIGNITER 异常:在布尔值上调用成员函数 num_rows()
- sql - PosrgreSQL 数据透视表
- ruby - 用相同的字符转换数组中的字符串
- iis - 如何在iis中重写