正则表达式 划分省市区(直辖市和附详细地址包括市,区)

目前有需求是将省市区从详细地址中提取出来。这里选择用正则表达式,语言使用C#。

查阅一般用于区分省市区的正则表达式,编写如下代码:

using System;
using System.Text.RegularExpressions;
class Demo
{
    static void Main()
    {
        string str = "内蒙古自治区巴彦淖尔市临河区新华东街三河小区康家电维修部";
        str = str.Replace(" ", "");
        String regex = "(?<province>[^省]+省|.+自治区)(?<city>[^自治州]+自治州|[^市]+市|[^盟]+盟|[^地区]+地区|.+区划)(?<county>[^市]+市|[^县]+县|[^旗]+旗|.+区)?(?<town>[^区]+区|.+镇)?(?<village>.*)";
        string[] res = Regex.Split(str, regex);
        foreach (string word in res)
        {
            Console.WriteLine(word);
        }
    }
}

要么不能区分出直辖市,要么当详细地址中包括小区,或者市的字段时,会有如下情况出现:

 使用 string str = "浙江省台州市温岭市新华东街三河小区康家电维修部";时出现如下情况:

提供解决方案为,划分到区县一级(county)时,正则表达式的匹配规则改为同时匹配(区|市|县|旗|岛|海域),按第一次出现的区|市|县|旗|岛|海域)值进行划分。 

using System;
using System.Text.RegularExpressions;
class Demo {
   static void Main() {
      string str = "浙江省台州市温岭市新华东街三河小区康家电维修部";
	  str = str.Replace(" ", "");
	  string regex = "(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)?(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)?(?<county>[^(区|市|县|旗|岛)]+区|.*?市|.*?县|.*?旗|.*?岛)?(?<village>.*)";
      string[] res = Regex.Split(str, regex);
      foreach (string word in res) {
         Console.WriteLine(word);
      }
   }
}

结果符合要求
 

 使用 string str = "内蒙古自治区巴彦淖尔市临河区新华东街三河小区康家电维修部";

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值