【问题标题】:Regex based on address in any order正则表达式基于任意顺序的地址
【发布时间】:2021-11-17 11:03:15
【问题描述】:

我有一个基于地址格式的正则表达式: ([0-9-]*) ?([\p{L}*,\. '-]*) ?([0-9 ]*) ?([\p{L}*,\. '-]*) ([0-9]{5}) ?([\p{L}*,\. '-]*)

它可以匹配这个: 16 Rue du Pont Louis-Philippe 75000 Paris

但我也想用这种格式来匹配这个正则表达式: 75000 Paris 16 Rue du Pont Louis-Philippe

有人可以帮我吗?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    模式中有很多可选部分。您可以将最后 2 组设为可选,但您必须使用 + 将量词更改为 1 次或多次以防止部分匹配(或将 ^ 添加到模式以断言字符串的开头)

    ([0-9-]+) ([\p{L}*,. '-]+) ([0-9 ]+) ([\p{L}*,. '-]+)(?: ([0-9]{5}) ([\p{L}*,. '-]+))?
    

    Regex demo

    【讨论】:

    • 谢谢它的工作!但我还有另一个问题,我有不同的地址模式:16 Rue du Pont Louis-Philippe 75000 Paris75000 Paris 16 Rue du Pont Louis-Philippe16 Rue du pont Louis-Philippe 1er 75000 Paris75000 Paris 16 Rue du pont Louis-Philippe 1er
    • @Octaz 这些都是变种吗?由于所有不同的符号,匹配地址可能非常具有挑战性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2013-01-16
    • 2011-06-20
    相关资源
    最近更新 更多