当前位置: 首页 > news >正文

匹配全国地址的正则表达式工具类

正则表达式,匹配全国五级地址工具类,可以直接放在项目中使用~
1级:国 (可忽略不填)
2级:**省、**自治区、**直辖市、**特别行政区、(四个直辖市可忽略不填)
3级:**市、**地区、**自治州、**盟、**自治区、**县、**自治县、
4级:**区、**市、**县、**乡、**民族乡、**镇、**自治县、
5级:**县、**街道、**镇、**团、**岸、**场、**处、**委员会、**区、市、乡、
+详情地址(如:小区
单元
室)

拿到手就可以直接使用啦
如下是运行结果:
在这里插入图片描述


import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/**1级:国 (可忽略不填)2级:**省、**自治区、**直辖市、**特别行政区、(四个直辖市可忽略不填)3级:**市、**地区、**自治州、**盟、**自治区、**县、**自治县、4级:**区、**市、**县、**乡、**民族乡、**镇、**自治县、5级:**县、**街道、**镇、**团、**岸、**场、**处、**委员会、**区、**市、**乡、+详情地址(如:**路**小区**单元**室)** @date 2024-10-12 17:30:00* @author wangzhen*/
public class RegionCalcUtil {// 匹配国家: 中国 一级地址private static final String nation = "中国";// 正则表达式: 匹配城市 二级地址private static final String provinceRegex = "(?<province>[^省]+省|[^自治区]+自治区|[^特别行政区]+特别行政区|[^直辖市]+直辖市|北京|上海|天津|重庆)";// 正则表达式: 匹配区市县 三级地址private static final String cityRegex = "(?<city>[^市]+市|[^地区]+地区|[^自治州]+自治州|[^盟]+盟|[^自治区]+自治区|[^县]+县)";// 正则表达式: 匹配街道镇等 四级地址private static final String areaRegex = "(?<area>[^县]+县|[^区]+区|[^市]+市|[^乡]+乡|[^镇]+镇)";// 正则表达式: 匹配街道镇团等 五级地址private static final String streetRegex = "(?<street>[^县]+县|[^街道]+街道|[^镇]+镇|[^团]+团|[^岸]+岸|[^场]+场|[^处]+处|[^委员会]+委员会|[^区]+区|[^市]+市|[^乡]+乡)";// 正则表达式: 匹配国家private static final String detailAddress = "(?<detail>.*)";// 各级地址分隔符,如想在各级地址中间带上 - ,就设置为该值private static final String separate = "";// 该属性是线程安全的private static final Pattern pattern;static {// 初始化patternpattern = Pattern.compile(provinceRegex + separate +cityRegex + separate +areaRegex + separate +streetRegex + separate +detailAddress);}public static void main(String[] args) {
//        山东省-威海市-威海火炬高技术产业开发区-怡园街道威海高区文鑫家园2号楼001室
//        上海市-长宁区-程家桥街道虹桥路2279号温莎花园00幢
//        浙江省-金华市-义乌市-廿三里街道街道龙潭路1号33楼
//        山东省-菏泽市-牡丹区-东城街道青年南路569韵泽园小区1号楼一单元
//        江西省-南昌市-南昌县-东新乡象湖新城金沙大道绿地山庄188栋String address = "重庆 重庆市 合川区 钓鱼城街道盘龙路环球家园1栋一单元4_3;";System.out.println(addressResolution(address));}public static Region addressResolution(String address) {address = prevProcess(address);// 编译正则表达式,注意这里的顺序可能需要调整以避免冲突Matcher matcher = pattern.matcher(address);if (matcher.find()) {// 用于有序存放四级地址Region region = new Region();region.setNation(nation);region.setProvince(removeStr(matcher.group("province")));region.setCity(removeStr(matcher.group("city")));region.setArea(removeStr(matcher.group("area")));region.setStreet(removeStr(matcher.group("street")));region.setDetail(removeStr(matcher.group("detail")));return region;}return null;}public static LevelRegion addressResolutionToLevel(String address){Region region = addressResolution(address);if(region == null){return null;}LevelRegion levelRegion = new LevelRegion();levelRegion.setFirstRegion(region.getNation());levelRegion.setSecondRegion(region.getProvince());levelRegion.setThirdRegion(region.getCity());levelRegion.setFourthRegion(region.getArea());levelRegion.setFifthRegion(region.getStreet());levelRegion.setDetail(region.getDetail());return levelRegion;}private static String removeStr(String str){if(str == null){return null;}return str.trim().replaceAll("-", "").replaceAll(",", "").replaceAll("\\.", "").replace(" ", "");}private static String prevProcess(String address){// 不填四个直辖市,给补充上if(address.startsWith("上海市")){address = "上海" + address;}else if(address.startsWith("北京市")){address = "北京" + address;}else if(address.startsWith("天津市")){address = "天津" + address;}else if(address.startsWith("重庆市")){address = "重庆" + address;}// 将国家去掉if(address.startsWith(nation)){address = address.substring(nation.length());}return address;}@Getter@Setter@ToStringpublic static class Region{/*** 一级地址:中国*/private String nation;/*** 二级地址:省、*/private String province;/*** 三级地址值:区市县*/private String city;/*** 四级地址:镇等*/private String area;/*** 五级地址:街道等*/private String street;/*** 后续地址详情*/private String detail;}@Getter@Setter@ToStringpublic static class LevelRegion{/*** 一级地址:中国*/private String firstRegion;/*** 二级地址:省、*/private String secondRegion;/*** 三级地址值:区市县*/private String thirdRegion;/*** 四级地址:镇等*/private String fourthRegion;/*** 五级地址:街道等*/private String fifthRegion;/*** 后续地址详情*/private String detail;}
}

相关文章:

匹配全国地址的正则表达式工具类

正则表达式&#xff0c;匹配全国五级地址工具类&#xff0c;可以直接放在项目中使用~ 1级&#xff1a;国 &#xff08;可忽略不填&#xff09; 2级&#xff1a;**省、**自治区、**直辖市、**特别行政区、&#xff08;四个直辖市可忽略不填&#xff09; 3级&#xff1a;**市、**…...

Notepad++ 使用技巧

notepad 高级“查找模式” 1&#xff09;两个换行换一行 选中为 “扩展&#xff08;\n, \r, \t, \0, \x…&#xff09;” &#xff0c;查找目标里面可以写上\r\n\r\n&#xff0c;替换为\r\n 2&#xff09;移除空行 查找目标&#xff1a;\r\n\r\n&#xff0c;替换为&#xf…...

《语音识别芯片选型全攻略》

《语音识别芯片选型全攻略》 一、语音识别芯片性能评估&#xff08;一&#xff09;主控芯片性能评估&#xff08;二&#xff09;接口需求分析&#xff08;三&#xff09;可靠性评估&#xff08;四&#xff09;生产工艺考量&#xff08;五&#xff09;湿敏等级判断 二、语音识别…...

【MySQL】VARCHAR和CHAR的区别?

目录 区别存储方式最大长度存取效率 使用场景参考 在MySQL中&#xff0c;VARCHAR和CHAR是两种常用的字符串数据类型&#xff0c;它们各自有不同的特点和适用场景。下面我将和大家一起了解这两种数据类型的区别及使用场景。 区别 存储方式 CHAR(N)&#xff1a;定长存储&#…...

SQL Server日期查询常用语句

一、以下是SQL 日期截取 & SQL Server日期比较日期查询常用语句 select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),-,), ,),:,) 20040912110608 select COUNVRT(varchar(12) , getdate…...

java地理方位角度计算

计算方位角度 从一个坐标到另一个坐标的方位角度. GIS地理 方位角&#xff0c;正北作为0度基线&#xff0c;顺时针旋转。 /*** GIS方位角度&#xff0c;正北为0度&#xff0c;顺时针旋转** param lat1 坐标1纬度* param lon1 坐标1经度* param lat2 坐标2纬度* param lon2 坐…...

RabbitMQ service is already present - only updating service parameters

Windows下卸载RabbitMQ之后,然后重新注册RabbitMQ服务的时候,报错以下信息: D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin>D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin\rabbitmq-service.bat install RabbitMQ service is already …...

贵州网站建设提升可见性的策略

贵州网站建设提升可见性的策略 在数字化时代&#xff0c;网站的可见性对企业的成功至关重要。在贵州&#xff0c;随着互联网的发展&#xff0c;越来越多的企业意识到网站建设的重要性。那么&#xff0c;如何有效提升网站的可见性呢&#xff1f;以下是几个关键策略。 **1. 优化…...

SUGAR:用于皮层表面配准的球形超快图注意力框架|文献速递-基于深度学习的医学影像分类,分割与多模态应用

Title 题目 SUGAR: Spherical ultrafast graph attention framework for cortical surface registration SUGAR&#xff1a;用于皮层表面配准的球形超快图注意力框架 01 文献速递介绍 基于表面的分析在解剖和功能神经影像学研究中变得越来越受欢迎&#xff08;Coalson 等,…...

华为高频手撕冲刺

简单题 两数之和 方法一&#xff0c;暴力破解&#xff0c;时间复杂度O(n^2)&#xff0c;空间复杂度O(1) class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:nlen(nums)for i in range(n):for j in range(i1,n):if nums[i]nums[j]target:retur…...

如何优雅的通过Spring Boot+Redission对订单实现定时关闭

简介 在电子商务及支付相关平台中&#xff0c;常规流程是首先生成订单或支付请求&#xff0c;用户随后会在规定时间内完成支付。如果用户未能在预设时限内完成支付动作&#xff0c;系统通常会执行相应的过期处理机制&#xff0c;即自动取消未支付的订单。 此外&#xff0c;这…...

二、IPD 的定义与背景

IPD 的定义与背景 1. IPD的定义 集成产品开发(Integrated Product Development,简称IPD)是一种系统化的产品开发模式,强调市场需求导向和跨职能团队的紧密合作,通过并行工程缩短开发周期、降低开发风险和成本。其核心目标是提高产品的市场竞争力,确保产品在开发各阶段都…...

STM32CubeMX初始生成工程

STM32CubeMX初始生成工程 STM32CubeMX软件可以很容易的配置STM32 MCU&#xff0c;例如引脚配置(Pins)、时钟树(Clock Tree)、外设(Peripherals)、中间件(Middleware)等 使用STM32CubeMX软件可以快速配置STM32工程&#xff0c;生成Keil工程文件以及初始化生成统一风格的C代码&…...

STM32单片机(F03C8T6)-点灯(寄存器点灯和库函数点灯)

作者&#xff1a;Whappy 时间&#xff1a;2024.10.9 日志&#xff1a;本实验是我第一个32位单片机实验程序&#xff0c;如有不足请指点&#xff01; #include "stm32f10x.h" // Device headerint main(void) {//寄存器点灯RCC->APB2ENR 0x000…...

PCL 3D-SIFT关键点检测(曲率不变特征约束

PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新) 一、概述 3D-SIFT(Scale-Invariant Feature Transform)关键点检测是用于点云分析的一种有效方法,具有尺度不变性和旋转不变性。在处理复杂场景和物体识别时,通过对点云…...

Android上的AES加密

基础算法说明 https://www.youtube.com/watch?vlnKPoWZnNNM 虽然这个视频讲的非常详细&#xff0c;但是涉及到具体底层算法&#xff0c;大致流程 1. 将数据转成HEX或者byte array 2.将数据分层一块块等大小的数据 3.将数据和key 进行一次混合&#xff0c;加密之后的输出&…...

安全测试的漏洞类型

目录 一、安全测试的定义 二、安全测试的分类 1、静态扫描 2、内存扫描 3、动态安全测试 三、安全测试主要关注哪些方面的漏洞 漏洞一&#xff1a;SQL注入 漏洞二&#xff1a;XSS 漏洞三&#xff1a;暴力破解 漏洞四&#xff1a;文件包含文件上传漏洞 漏洞五&#…...

51 | 适配器模式:代理、适配器、桥接、装饰,这四个模式有何区别?

前面几篇文章我们学习了代理模式、桥接模式、装饰器模式&#xff0c;今天&#xff0c;我们再来学习一个比较常用的结构型模式&#xff1a;适配器模式。这个模式相对来说还是比较简单、好理解的&#xff0c;应用场景也很具体&#xff0c;总体上来讲比较好掌握。 关于适配器模式…...

ORM框架简介

什么是ORM&#xff1f; ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;是一种编程技术&#xff0c;用于在关系数据库和对象程序语言之间转换数据。ORM框架允许开发者以面向对象的方式来操作数据库&#xff0c;而不需要编写复杂的SQL语句。简单…...

Windows系统上根据端口号查找对应进程

“开始”-“运行”&#xff0c;输入cmd&#xff0c;打开命令行窗口&#xff0c;输入netstat和findstr的组合&#xff0c;找出占用了4118的端口的进程 根据上述PID&#xff0c;使用tasklist和findstr的组合&#xff0c;找出对应进程是dsa.exe 要想kill此进程&#xff0c;可以打开…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...