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

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

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

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

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

正则表达式 划分省市区(直辖市和附详细地址包括市,区)_第1张图片

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

正则表达式 划分省市区(直辖市和附详细地址包括市,区)_第2张图片

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

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

结果符合要求
 

正则表达式 划分省市区(直辖市和附详细地址包括市,区)_第3张图片

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

正则表达式 划分省市区(直辖市和附详细地址包括市,区)_第4张图片

你可能感兴趣的:(正则表达式,c#)