(高分悬赏)从字符串中怎么提取省市区/县

yj19891214 2018-01-16 09:39:49
如下的字符串:
"浙江省温州市永嘉县岩头镇芙蓉新村15栋";(这样格式的就比较好匹配)

但是碰到格式不同的怎么处理?
如:
1、浙江省杭州市西湖区塘苗路18号华星现代产业园
2、浙江省 杭州市 西湖区 塘苗路18号 华星现代产业园
3、新疆维吾尔自治区 昌吉回族自治州 呼图壁县 天山雪大道98号天盛酒业
4、新疆维吾尔自治区乌鲁木齐市天山区青年路街道光明路北巷28号19号楼3单元102号

如何提取出省、市、区县、地址?

以上4个字符串希望得到如下的结果:

省 市 区县 地址
------------------------------------------------------------------------------------------------------------------------------------------
1、浙江省 杭州市 西湖区 塘苗路18号华星现代产业园
2、浙江省 杭州市 西湖区 塘苗路18号 华星现代产业园
3、新疆维吾尔自治区 昌吉回族自治州 呼图壁县 天山雪大道98号天盛酒业
4、新疆维吾尔自治区 乌鲁木齐市 天山区 年路街道光明路北巷28号19号楼3单元102号

疑问:碰到直辖市怎么整? 一些自治区怎么整?一些地级市怎么整???如:浙江省温州市乐清市
...全文
4707 点赞 收藏 24
写回复
24 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
forborn 2019-10-09
(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[^市]+自治州|.*?区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)(?<county>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇)?(?<village>.*)
这个正则会将直辖市的区放到city里面,咋改成放到county里啊
回复
望天小凶许 2019-09-12
省市区详细地址分离及省市区详细数据库:https://download.csdn.net/download/qq_26656427/10343554
回复
暗夜程序员 2019-09-02
可以这样做,
1、先建立全国的省、市、县/区表。
2、先用省表中的数据去字符串中匹配,
3、在用2加的省编码加载出其下的市集合,用这个使用去匹配字符串,
4、县/区也是像2,3这样处理就行。
5、每处理一级区域就将其从字符串中去掉。
经过上述的处理,剩下的就是详细地址了,就可以拼出你想要的结果了。
回复
little ng 2019-03-12
只输入深圳市 就查不出什么了 不是很实用
回复
秋9 2018-07-31
Java实现,参考 https://blog.csdn.net/jlq_diligence/article/details/81304527

1、浙江省杭州市西湖区塘苗路18号华星现代产业园
2、浙江省 杭州市 西湖区 塘苗路18号 华星现代产业园
3、新疆维吾尔自治区 昌吉回族自治州 呼图壁县 天山雪大道98号天盛酒业
4、新疆维吾尔自治区乌鲁木齐市天山区青年路街道光明路北巷28号19号楼3单元102号
测试结果为:
{area=西湖区, street=文三路辅路, province=浙江省, city=杭州市}
{area=西湖区, street=文三路辅路, province=浙江省, city=杭州市}
{area=呼图壁县, street=天山雪大道, province=新疆维吾尔自治区, city=昌吉回族自治州}
{area=天山区, street=光明路北巷, province=新疆维吾尔自治区, city=乌鲁木齐市}
回复
浅笑天无情 2018-01-17
很明显写的正则是无法匹配四个直辖市的,并且市的话,怎么区分是直辖市还是县级市,还是市区呢? 没想明白,怎么写都没用
回复
Braska 2018-01-17
一点规律都没有 也没有做规范 基本做不了吧
回复
yj19891214 2018-01-17
引用 13 楼 cattpon 的回复:
哎呀~竟然搬出了实际案例~
啥意思啊
回复
cattpon 2018-01-17
哎呀~竟然搬出了实际案例~
回复
yj19891214 2018-01-17
引用 11 楼 kampoo 的回复:
问题看似包括两方面:1. 内容正确格式不一致;2. 内容不正确 问题1. 这个相对简单,看到了你的正则表达式再优化下,把各种省地县的别名都加进去,把空白字符也考虑进去,比如(不一定周全供参考):

var regexFmt = "([汉字,下同]+[省|市|自治区])(\s*)([...]+[市|区|县|自治州|盟])(\s*)([...]+[县|区|旗|市])?(\s*)(.*)";
// 加入空白字符(\s*)
// 地级行政单位也包括县,比如直辖市有下一级的县,并没有地市
// 县一级也有县级市,但直辖市可能不存在这一级,所以这一级可选(用?)
// 其余的任意字符均列入详细地址
2. 内容不正确: 如果需要检验上述各级地址的正确性,请使用国家统计单位的数据库进行对比,或者部分匹配,列出完全地址和猜测地址。
可是你这正则表达式貌似是错的,你用java验证下!
回复
kampoo 2018-01-17
问题看似包括两方面:1. 内容正确格式不一致;2. 内容不正确 问题1. 这个相对简单,看到了你的正则表达式再优化下,把各种省地县的别名都加进去,把空白字符也考虑进去,比如(不一定周全供参考):

var regexFmt = "([汉字,下同]+[省|市|自治区])(\s*)([...]+[市|区|县|自治州|盟])(\s*)([...]+[县|区|旗|市])?(\s*)(.*)";
// 加入空白字符(\s*)
// 地级行政单位也包括县,比如直辖市有下一级的县,并没有地市
// 县一级也有县级市,但直辖市可能不存在这一级,所以这一级可选(用?)
// 其余的任意字符均列入详细地址
2. 内容不正确: 如果需要检验上述各级地址的正确性,请使用国家统计单位的数据库进行对比,或者部分匹配,列出完全地址和猜测地址。
回复
Braska 2018-01-17
String regex="^(?<province>[^省]+省|.+自治区)?(?<city>[^市]+市|.+自治州)?(?<county>[^县]+县|.+区)?(?<town>[^区]+区|.+镇)?(?<village>.*)";


二楼正则改成你要的,说实话这个需求真的无解。
回复
yj19891214 2018-01-17
引用 16 楼 moyan254 的回复:
很明显写的正则是无法匹配四个直辖市的,并且市的话,怎么区分是直辖市还是县级市,还是市区呢? 没想明白,怎么写都没用
这个可以判断县级市,indexof,但是优化他的正则好难啊,没有省或者没有市 就不行了
回复
yj19891214 2018-01-17
[quote=引用 2 楼 LinBilin_ 的回复:] 2L的正则是可以的?但是能否优化一下: String code7="浙江省杭州市塘苗路18号华星现代产业园"; 可以解析 [{province=浙江省, city=杭州市, county=, town=, village=塘苗路18号华星现代产业园}] 但是 String code8="浙江省西湖区塘苗路18号华星现代产业园"; String code9="杭州市西湖区塘苗路18号华星现代产业园"; String code10="上海市浦东新区兰陵镇"; 不行啊,因为他们有的没有省或者市 这个怎么优化 在2L的正则表达式上优化
回复
lkf181 2018-01-17
正则表达式吧...........
回复
tianfang 2018-01-16
下载国家行政地名标准 有人已经把数据导入了 https://github.com/cn/GB2260 数据来源是 http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/ http://www.mca.gov.cn/article/sj/tjbz/a/ 从字符串前面开做字符串匹配,先找省级,再找下一级
回复
tianfang 2018-01-16
引用 3 楼 yj19891214 的回复:
[quote=引用 1 楼 tianfang 的回复:] 下载国家行政地名标准 有人已经把数据导入了 https://github.com/cn/GB2260 数据来源是 http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/ http://www.mca.gov.cn/article/sj/tjbz/a/ 从字符串前面开做字符串匹配,先找省级,再找下一级
看清楚问题啊大哥 还是谢谢你[/quote] 我最后说了怎么计算: 从字符串前面开做字符串匹配,先找省级,再找下一级
回复
yj19891214 2018-01-16
引用 6 楼 MAX_WWei 的回复:
[quote=引用 4 楼 yj19891214 的回复:] [quote=引用 2 楼 LinBilin_ 的回复:] 你看最后一个 乐清市还是错的, 再比如说上海浦东新区朝阳镇/ 宁夏回族自治区中卫市沙坡头区宁卫线 这种呢
贴代码那层你改改就行了 增加一个县级市的字段 后面的可以规定一下录地址时的操作规范啊[/quote] 来来 咋改,麻烦你改下 我要是会就不来问了...
回复
最猛的阿良 2018-01-16
要是我就这么做 首先把全国行政区域建一张表 表字段是行政区域的细化 然后把地址字符串用正则分解 分解后作为条件模糊查询 将唯一对应的数据拿出来
回复
最猛的阿良 2018-01-16
引用 4 楼 yj19891214 的回复:
[quote=引用 2 楼 LinBilin_ 的回复:] 你看最后一个 乐清市还是错的, 再比如说上海浦东新区朝阳镇/ 宁夏回族自治区中卫市沙坡头区宁卫线 这种呢
贴代码那层你改改就行了 增加一个县级市的字段 后面的可以规定一下录地址时的操作规范啊
回复
加载更多回复
相关推荐
发帖
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2018-01-16 09:39
社区公告
暂无公告