如何结合正则AND与OR逻辑,实现目标地址前缀的精准匹配?
解决地址前缀正则匹配问题
你需要从给定的非英文地址中提取开头包含MAH.或CAD.的前缀部分,原有正则因采用互斥可选组的逻辑,只能匹配单个片段甚至空字符,无法满足需求。以下是可行的解决方案:
推荐正则表达式
^((?:\p{L}+(?:\s\p{L}+)*\s(?:MAH\.|CAD\.)\s?)+)
正则逻辑解释
^:锁定字符串开头,确保从地址起始位置提取内容(?:\p{L}+(?:\s\p{L}+)*):匹配由Unicode字母组成的名称(支持多单词名称,比如UĞUR MUMCU)\s(?:MAH\.|CAD\.):匹配空格后接MAH.或CAD.的固定标识\s?:允许标识后带一个可选空格,兼容地址格式差异+:重复整个片段规则,支持捕获多个连续的MAH./CAD.组合
匹配结果验证
针对你的示例地址,将得到以下目标匹配项:
KENNEDY CAD. SİRKECİ ARABALI VAPUR İSKELESİ FATİH/ İSTANBUL→ 匹配KENNEDY CAD.YAVUZTÜRK MAH. KARADENİZ CAD. NO:2 ÜSKÜDAR/ İSTANBUL→ 匹配YAVUZTÜRK MAH. KARADENİZ CAD.HAMİDİYE MAH. ALPEREN SOK. NO:15/2 ÇEKMEKÖY/ İSTANBUL→ 匹配HAMİDİYE MAH.UĞUR MUMCU MAH. YUNUS EMRE CAD. NO:25 KARTAL/ İSTANBUL→ 匹配UĞUR MUMCU MAH. YUNUS EMRE CAD.
如果需要不区分大小写匹配,可添加i修饰符:
^((?:\p{L}+(?:\s\p{L}+)*\s(?:MAH\.|CAD\.)\s?)+)$i
内容的提问来源于stack exchange,提问作者grey
相关产品推荐
相关产品推荐

