首页 > 解决方案 > 为什么 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 上显示它应该获取某些地址,但它错过了某些地址。示例包括:

我不知道是否发生了我不确定的 Pythonic 事件。对此的任何想法将不胜感激。谢谢!

标签: pythonregex

解决方案


推荐阅读