首页 > 其他分享 >收件信息解析

收件信息解析

时间:2024-01-17 15:26:30浏览次数:24  
标签:null string area 信息 Replace result 收件 解析 RegionName

private SmartAnalysisResult SmartAnalysisAddress(List<tm_master_city_PO> regions, string memo)
{
    var result = new SmartAnalysisResult();
    if (string.IsNullOrEmpty(memo)) return null;

    var areas = regions.Where(t => t.RegionType == "4").ToList();
    var citys = regions.Where(t => t.RegionType == "3").ToList();
    var provinces = regions.Where(t => t.RegionType == "2").ToList();
    tm_master_city_PO area=null;
    var strArray = memo.Split(new char[] { ',',',',':',':',' ','!','!','.','。','|'}).Select(x=>x.Trim()).OrderBy(x=>x.Length);

    //如果先按 区镇来查,会出现 不同市下相同名称的区镇,没法确定唯一性
    var province = provinces.FirstOrDefault(x => memo.IndexOf(x.RegionName) > -1);
    if(province==null)
    {
        province = provinces.FirstOrDefault(x => memo.IndexOf(x.RegionName.Replace("省", "")) > -1);
    }
    if(province!=null)
    {
        result.ProvinceID = province.CityID;
        result.ProvinceName = province.RegionName;

        var city = citys.FirstOrDefault(x => x.ParentCityID == result.ProvinceID && memo.IndexOf(x.RegionName) > -1);
        area = areas.FirstOrDefault(x => memo.IndexOf(x.RegionName) > -1);
        if (city==null&& area==null)
        {
            city = citys.FirstOrDefault(x => x.ParentCityID == result.ProvinceID && memo.IndexOf(x.RegionName.Replace("市", "")) > -1);
        }
        if (city != null)
        {
            result.CityID = city.CityID;
            result.CityName = city.RegionName;

            area = areas.FirstOrDefault(x => x.ParentCityID == result.CityID && memo.IndexOf(x.RegionName) > -1);
            if(area==null)
            {
                area = areas.FirstOrDefault(x => x.ParentCityID == result.CityID && memo.IndexOf(x.RegionName.Replace("区", "").Replace("镇", "")) > -1);
            }
            if (area != null)
            {
                result.AreaID = area.CityID;
                result.AreaName = area.RegionName;
            }
        }
        else
        {
            area = areas.FirstOrDefault(x =>memo.IndexOf(x.RegionName) > -1);
            if (area == null)
            {
                area = areas.FirstOrDefault(x => memo.IndexOf(x.RegionName.Replace("区", "").Replace("镇", "")) > -1);
            }
            if (area != null)
            {
                result.AreaID = area.CityID;
                result.AreaName = area.RegionName;

                result.CityID = area.ParentCityID;
                result.CityName = citys.FirstOrDefault(x => x.CityID == result.CityID).RegionName;
            }
        }
    }

    foreach (var str in strArray)
    {
        if (string.IsNullOrWhiteSpace(str))
        {
            continue;
        }

        var areaIndex = str.IndexOf(result.AreaName);
        if (areaIndex > 0)
        {
            result.Address = str.Substring(areaIndex + result.AreaName.Length);
        }

        var phones = GetTelephoneList(str);
        if (phones != null && phones.Count > 0)
        {
            result.TelPhone = phones.First();
        }
    }

    foreach (var str in strArray)
    {
        var str1 = str.Replace("手机", "").Replace("电话", "");

        if (!string.IsNullOrWhiteSpace(result.ProvinceName))
        {
            str1 = str1.Replace(result.ProvinceName, "");
        }
        if (!string.IsNullOrWhiteSpace(result.CityName))
        {
            str1 = str1.Replace(result.CityName, "");
        }
        if (!string.IsNullOrWhiteSpace(result.AreaName))
        {
            str1 = str1.Replace(result.AreaName, "");
        }

        if (string.IsNullOrWhiteSpace(str1))
        {
            continue;
        }
        string nameStr = "";
        var telPhoneIndex = str1.IndexOf(result.TelPhone);
        if(telPhoneIndex>0)
        {
            nameStr = SmartAnalysisName(str1.Substring(telPhoneIndex + result.TelPhone.Length));
            if (!string.IsNullOrWhiteSpace(nameStr))
            {
                result.ContactUser = nameStr;
                break;
            }
        }

        if (!string.IsNullOrWhiteSpace(result.TelPhone))
        {
            str1 = str1.Replace(result.TelPhone, "");
        }       
        nameStr = SmartAnalysisName(str1);
        if (!string.IsNullOrWhiteSpace(nameStr))
        {
            result.ContactUser = nameStr;
            break;
        }
    }

    if (!string.IsNullOrWhiteSpace(result.TelPhone))
    {
        result.Address = result.Address.Replace(result.TelPhone, "");
    }
    if (!string.IsNullOrWhiteSpace(result.ContactUser))
    {
        result.Address = result.Address.Replace(result.ContactUser, "");
    }

    return result;
}
private string SmartAnalysisName(string name)
{
    if(name==null)
    {
        return null;
    }
    name = name.TrimEnd('收');
    var index = name.IndexOf("特殊名称");
    name = name.Replace("特殊名称", "");
    if (string.IsNullOrWhiteSpace(name))
    {
        return null;
    }

    if (name.Length>1&&name.Length<6) //认为是姓名
    {
        if(index==-1)
        {
            return name;
        }
        else if(index==1)
        {
            return "特殊名称" + name;
        }
        else
        {
            return name + "特殊名称";
        }
    }

    return null;
}
        /// <summary>
        /// 提取字符串中的电话号
        /// * 兼容11位手机号、3位或4位区号+8位电话号、400电话的两种写法(400-ddd-dddd、400ddddddd)
        /// </summary>
        /// <param name="input">输入的字符串</param>
        /// <returns></returns>
        private List<string> GetTelephoneList(string input)
        {
            //集合存放提取出来的电话号码
            List<string> list = new List<string>();

            /*
             * 正则表达式提取
             * 分为五种格式,能兼容11位手机号、3位或4位区号-7位或8位电话号、400电话的两种写法(400-ddd-dddd、400ddddddd)
             */
            Regex regex = new Regex(@"(1[3|4|5|6|7|8|9]\d{9})|(0\d{2,3}-\d{7,8})|(400-\d{3}-\d{4})|(400\d{7})");
            //Regex regex = new Regex(@"(1[3|4|5|6|7|8|9]\d{9})");

            //Match集合,匹配成功的字符串集合
            MatchCollection collection = regex.Matches(input);

            //遍历Match集合,取出值
            string telephone;
            foreach (Match item in collection)
            {
                foreach (Group group in item.Groups)
                {
                    telephone = group.Value.Trim();
                    //偶尔会出现重复提取,所以加了去重判断
                    if (!string.IsNullOrEmpty(telephone) && !list.Contains(telephone))
                    {
                        list.Add(telephone);
                    }
                }
            }

            return list;
        }
    /// <summary>
    /// 省市区表(tm_master_city)
    /// </summary>
    public partial class tm_master_city_PO
    {
        /// <summary>
        /// CityID
        /// </summary>
public int CityID { get; set; }

        /// <summary>
        /// ParentCityID
        /// </summary>
        public int ParentCityID { get; set; }

        /// <summary>
        /// RegionName
        /// </summary>
        public string RegionName { get; set; }

        /// <summary>
        /// RegionType
        /// </summary>
        public string RegionType { get; set; }

        /// <summary>
        /// PostNo
        /// </summary>
        public string PostNo { get; set; }

    }

输入:memo:浙江省海宁市海昌南路498号金汇大厦,黄赵画15067366587

输出:

{
    "contactUser":"黄赵画",
    "telPhone":"15067366159",
    "provinceID":330000,
    "provinceName":"浙江省",
    "cityID":330400,
    "cityName":"嘉兴市",
    "areaID":330481,
    "areaName":"海宁市",
    "address":"海昌南路498号金汇大厦"
}

 

标签:null,string,area,信息,Replace,result,收件,解析,RegionName
From: https://www.cnblogs.com/nanxixi/p/17970070

相关文章

  • 白话文解析LiteFlow的理念是什么?什么时候用该怎么用?干货满满
    官网:https://liteflow.cc/Gitee:https://gitee.com/dromara/liteFlowGithub:https://github.com/dromara/liteflowLiteFlow一个现代化的开源规则引擎框架,以下文中简称LF。前言时常在社区里看到有的小伙伴在那提问:LF在一个流程中如何暂停,等待操作员完成后,进行下一步该怎么做?LF......
  • 长沙 湖南师范大学 信息科学与工程学院 地址
    火车站:乘立珊专线师大站下(或地铁二号线到溁湾镇转地铁四号线到师大站下)高铁站:乘63路到桃子湖路口站下(或地铁四号线到师大站下)汽车东站:乘126路、127路到火车站后再转乘上述路线汽车西站:乘63路、902路挑子湖路口站下(或地铁二号线到溁湾镇转地铁四号线到师大站下)汽车南站:乘152路桃子......
  • 解析HTTP响应的状态码和头部信息
    HTTP响应是客户端与服务器之间通信的重要部分。它包含了服务器对客户端请求的回应,以及与该响应相关的各种信息。在HTTP响应中,有两个关键部分:状态码和头部信息。状态码状态码是HTTP响应的第一部分,它是一个三位数字的代码,用于表示请求的处理结果。状态码提供了一种标准的方法来告诉客......
  • Jenkins 敏感信息实战指南
    在Jenkins中,安全地管理敏感信息对于构建和部署过程至关重要。本实战指南将详细介绍如何添加凭据、使用HashiCorpVault插件,并通过创建Pipeline脚本、在shell脚本中使用,以及在Python脚本中使用来管理敏感信息。步骤1:添加凭据登录Jenkins控制台。在左侧导航栏选择"Ma......
  • 商业应用算力全球新标杆!浪潮信息八路服务器创SAP SD评测最高性能
    1月15日,据全球领先的企业应用软件提供商SAP发布的最新SAPSD评测结果,浪潮信息TS860G7服务器创下1,659,970 SAPS的最高性能成绩,成为商业应用算力的全球新标杆。TS860G7是浪潮信息最新一代的企业级八路服务器,其取得的最新成绩也成功超越了16路小型机系统保持的性能纪录。SAPSD是SAP......
  • 信息安全认证 | CISP考试说明
    注册信息安全专业人员(CertifiedInformationSecurityProfessional,简称“CISP"),是由中国信息安全测评中心依据中编办赋予的职能,建立和发展的一整套完整的信息安全保障人才培训体系。CISP证书是国家对信息安全专业人员能力的最高认可。01证书价值1.权威性CISP是由中国信息安全测评......
  • ELF 零散信息
    ELF文件规范ELF(ExecutableandLinkingFormat)是一个二进制文件规范。用于定义不同类型的对象文件(Objectfiles)中都放了什么东西、以及都以什么样的格式去放这些东西。现在流行的二进制可执行文件格式(ExecutableFileFormat),主要是Windows下的PE(PortableExecutable)和Li......
  • Spring Boot 自动配置机制全解析
    本篇博文旨在全面剖析SpringBoot的自动配置原理,为开发者提供深入理解其背后机制的视角。SpringBoot自动配置通过智能地推断所需配置,极大地简化了开发过程,优化了开发体验。1.SpringBoot自动配置的核心:@SpringBootApplicationSpringBoot应用的入口通常标注有@SpringBootAp......
  • 构建高效数据生态:数据库、数据仓库、数据湖、大数据平台与数据中台解析_光点科技
    在数字化的浪潮中,一套高效的数据管理系统是企业竞争力的核心。从传统的数据库到现代的数据中台,每一种技术都在数据的旅程中扮演着关键角色。本文将深入探讨数据库、数据仓库、数据湖、大数据平台以及数据中台的功能和价值,帮助您构建一个符合自身业务需求的高效数据生态系统。数据库......
  • “五星卡”上新!合合信息“外国人永久居留身份证”识别产品助力金融机构提升服务效率
      外国人永久居留身份证(简称“永居证”),是国家移民管理局对符合条件的外国人批准其在境内永久居留后,为其签发的法定身份证件。2023年12月,国家移民管理局正式启用签发更趋近于居民身份证技术体系的新一版永居证(又称“五星卡”),并会同有关部门大力推进各相关行业......