Python 使用正则表达式解析不一致的自由格式街道名称

Python parse inconsistent free form street names using regex

对于以下结构中的数据,我想获取解析后的街道名称详细信息:

# streetname 1() refers to house number 1 with an empty () additional qualifier 

keyword_token: street name 4()
keyword_token: street-name 14()

keyword_token: streetname 123()keyword_token: streetname 123()
# why is it logged one message per line, but we get the address logged twice - sometimes??

keyword_token: streetname 9(7)keyword_token: streetname 9(7)
keyword_token: streetname 27()\r\n a lot more text and log messages in the free form text log - one messageper line  \n
    
keyword_token: street-name 1-23(BLOCK D HAUS 6)keyword_token: street-name 1-23(BLOCK H HAUS 2)keyword_token: street-name 1-23(BLOCK G HAUS 3)',
        
        

理想的预期结果是: 每条记录 3 个字段:

到目前为止,我尝试了以下正则表达式:keyword_token(.*),但这是在关键字标记后给出整行。

并发症:

edit: an example regex101 is found here https://regex101.com/r/ueEfNU/1

edit 2: also not numeric house numbers need to be supported.

keyword_token: street_name 32a()

你可以使用

keyword_token:\s*(.*?)\s*(\d[a-zA-Z\d-]*)\(([^()]*)\)

regex demo详情:

  • keyword_token: - 固定字符串
  • \s* - 零个或多个空格
  • (.*?) - 第 1 组:除换行符以外的任何零个或多个字符,尽可能少(由于 *? 惰性量词)
  • \s* - 零个或多个空格
  • (\d[a-zA-Z\d-]*) - 第 2 组:一个数字,然后是零个或多个字母、数字或 - 字符
  • \( - 一个 ( 字符
  • ([^()]*) - 第 3 组:()
  • 以外的一个或多个字符
  • \) - 一个 ) 字符。