目前有需求是将省市区从详细地址中提取出来。这里选择用正则表达式,语言使用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 = "内蒙古自治区巴彦淖尔市临河区新华东街三河小区康家电维修部";

更多推荐

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