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 个字段:
- 街道名称
- 门牌号
- 附加限定词(empty/NaN)如果是empty/missing
到目前为止,我尝试了以下正则表达式:keyword_token(.*)
,但这是在关键字标记后给出整行。
并发症:
- 我只对第一场比赛感兴趣(不多),即
keyword_token:
的第一次出现
- 街道名称本身可能很不一致(空格,-)它将在
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 组:(
和 )
以外的一个或多个字符
\)
- 一个 )
字符。
对于以下结构中的数据,我想获取解析后的街道名称详细信息:
# 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 个字段:
- 街道名称
- 门牌号
- 附加限定词(empty/NaN)如果是empty/missing
到目前为止,我尝试了以下正则表达式:keyword_token(.*)
,但这是在关键字标记后给出整行。
并发症:
- 我只对第一场比赛感兴趣(不多),即
keyword_token:
的第一次出现
- 街道名称本身可能很不一致(空格,-)它将在
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 组:(
和)
以外的一个或多个字符
\)
- 一个)
字符。