跟我学正则——如果用正则提取城市名,去掉市/xx自治州

因为项目需要,需要将数据库中的中国城市名字中的市、某某自治州之类的去掉,因为我们的数据库保存的是全名称的城市名称,而用户在使用的时候,只需要城市名称就可以了,不需要全称,比如说你在ctrip去查机票的时候,一般是选择北京,而不是北京市。特别是我们需要将中文通过程序转换成拼音的时候,我们是不需要这个区域的级别的,你总不能把北京市翻译成BeiJingShi给老外看吧,会给国际友人笑话的。

需求:把博尔塔拉蒙古自治州这类改成博尔塔拉,把绍兴市/焦作市这类改成绍兴/焦作,把xx族自治州去掉,也就是说,我们只需要城市的名称。

需求分析:很多第一反映是使用Replace的方法,比如说xx市,我们可以使用Replace("绍兴市","市","")进行替换。嗯,是很简单,可是我们要知道,有些城市中间带有市字,比如说有一个城市叫津市市,如果你使用这种方式去替换,那么津市市就变成了津了,这是要闹笑话的。替换还有一个问题,比如说像xx自治州,这个xx是不固定的,可能是一个民族的名称,也可能是两个民族的名称,怎么办?

这个时候,我们可以试试一下正则表达式来做这个事情,我们只需要很少量的代码,就可以提取到城市的名称。先把城市名称大致看一下,做了个分析。大致城市的名称有这么几种类型。

  1. 城市名 + x族xx族自治州,比如说博尔塔拉蒙古自治州
  2. 城市名 + x族自治州
  3. 城市名 + x自治州,这个x是民族的名称,x表示一个字符
  4. 城市名 + xx族自治州
  5. 城市名 + 市
  6. 城市名 + 地区
  7. 城市名 + 自治州

OK,得出规则,那就好办了,我们只需要使用正则将符合这些规则的替换掉就成了,最后可以得到干净的城市名称。来看一下代码示例,代码我是用Javascript写的,当然,你也可以使用其它你习惯的语言来写,基本上正则是跨平台的,主流的主流都支持正则表达式。

	name = name.replace(/(.+)[藏|壮|傣]族.{1,2}族自治州/g, "$1");
	name = name.replace(/(.+)((.{2}族.{1,2}族)|蒙古)自治州/g, "$1");
	name = name.replace(/(.+)[回|藏|藏|彝|傣|白]族自治州/g, "$1");
	name = name.replace(/(.+)(.{2}族)自治州/g, "$1");
	name = name.replace(/(.{2,10})市/g, "$1");
	name = name.replace(/地区|自治州/g, "");
	document.writeln(name + ", " + city.n);

其实代码很简单,但我们确能提取到城市名,需要注意的是,这段代码的顺序很重要。

下载:Note: There is a file embedded within this post, please visit this post to download the file.

  

注意:本文为我的独立博客镜像博客,自发表不再更新,原文可能随时被更新,敬请访问原文。同时,请大家不要在此评论,如果有什么看法,请点击这里:http://iove.net/1705/

本文来自http://iove.net,欢迎转载,转载敬请保留相关链接,否则视为侵权,原文链接:http://iove.net/1705/

转载于:https://www.cnblogs.com/conis/archive/2009/12/25/1720419.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值