匹配地址的正则表达式:匹配具有不同结构的地址的问题

Regular Expression to match addresses: problem with matching addresses with different structures

我正在使用正则表达式来匹配街道地址的不同部分(街道编号、街道、城市...)。 到目前为止,除城市外,一切正常,具体取决于地址的结构:

我数据中的一些地址仅以城市结尾,例如: “巴黎” 其他一些以城市、逗号和国家/地区结尾,结构如下:"Paris, France"
我发现正则表达式可以匹配除地址结尾(城市+国家)以外的所有内容,所以我想正确匹配城市。

我不能只匹配第一个词,因为有些城市由多个词组成(示例:Saint-Jean-Port-Joli)。

以下是我尝试匹配的城市:

(\w.*,|\w.*$)

不幸的是,这给了我: "Paris" 用于以 "Paris" 结束的地址和 “巴黎”,““法国巴黎”结尾的地址

我该怎么办?

感谢您的帮助, 蒂姆

如果您的正则表达式风格支持前瞻,这将非常简单:

^.+?(?=(, [\w\s]+)?)$

我添加了 \s 以便像布基纳法索这样的国家能够正确解析。请注意,如果您的字符串有多个逗号,这将包括最后一个逗号。

匹配所有不是逗号的字符:

^[^,]+

live demo

这匹配所有内容,但不包括第一个逗号或结尾,以先到者为准。

这也适用于其中包含各种字符的城市名称,例如 L'Haÿ-les-Roses, France