当前位置:编程学习 > C#/ASP.NET >>

C#中切割字符串之正则表达式应用

这个是我做的使用正则表达式来切割字符串的一个案例部分代码:

功能简介:一条物流信息字符串中截取出多种数据详情

需要切割出的数据包括:

起始地,目的地,货物数量,货物单位,货物类型,车数量,车长度,车类型,价格,价格单位

需要切割字符串类型举例(多种,包括有车求货,有货求车等):

 

1、湖南衡阳->湖南湘潭、湖南长沙,有6米半封闭车,求1-8吨货

2、湖南长沙->河南南阳,有9.6米平板车,求货

3、湖南长沙->青海、陕西西安、陕西汉中、陕西安康,有2台6.8米高栏车,求12-25吨货

4、湖南湘潭->湖南岳阳临湘,有27-120吨重货,求1-3台9.6-17.5米车,今天定车 明天装货

5、湖南岳阳临湘->山东菏泽,有15-28吨棉花,求9.6-17米车,230元/吨,马上可以装货

6、湖南长沙->湖南益阳安化县,有1吨货物,求2-3米车,急运

7、湖南湘潭->江西赣州,有35-40吨货物,求半挂车,急运

...

 

当然,这些仅仅只是举例

下面是方法详细代码:

using System.Text;

using System.Text.Regularexpressions;

#region 使用正则表达式切割字符串
        /// <summary>
        /// 切割字符串分别赋值给KC_INFO实例的属性:
        /// KCI_START_ADDRESS,KCI_END_ADDRESS,KCP_GOODS_ID,KCI_GOODS_NUMBER,KCI_GOODS_UNIT,KCP_CAR_ID,KCI_CAR_NUMBER,KCI_CAR_LENGTH,KCI_PRICE,KCI_PRICE_UNIT
        /// </summary>
        /// <param name="ki"></param>
        public void splitMainInfoString(KC_INFO ki)
        {
            string reg_start_address = string.Format(@"^[^->]*(?=->)");
            string reg_end_address = string.Format(@"(?<=->)[^,]*(?=,)");
            string reg_goods_number = string.Empty;
            string reg_goods_unit = string.Empty;
            string reg_goods_id = string.Empty;
            string reg_car_id = string.Empty;
            string reg_car_number = string.Empty;
            string reg_car_length = string.Empty;
            string reg_price = string.Empty;
            string reg_price_unit = string.Empty;
            //用,号分割字符串
            MatchCollection ms = Regex.Matches(InfoText, @"[^,]*[^s](?=,|$)");
            string goodsInfoString = string.Empty;
            string carInfoString = string.Empty;
            if((new int[]{2,22,5}.Contains(this.Type))) //有货求车
            {
                //货物信息字符串
                goodsInfoString = ms[1].ToString();
                //车辆信息字符串
                carInfoString = ms[2].ToString();
                //匹配货物数量的Regularexpression
                reg_goods_number = string.Format(@"(?<=有)((d+.d+)|(d+-d+)|d+)(?=(吨|方|件|车|公斤|个|台))");
                //匹配货物单位
                reg_goods_unit = string.Format(@"(?<=有((d+.?d+)|(d+-d+)|d+))(吨|方|件|车|公斤|个|台)");
                //匹配货物单位
                reg_goods_id = string.Format(@"(?<=有((d+.d)|(d+-d+)(d+))(吨|方|件|车|公斤|个|台))w+");

 

                //匹配需要车的数量
                reg_car_number = string.Format(@"(?<=求)((d+-d+)|(d+))(?=台)|(?<=求)大量");
                //匹配车的长度
                reg_car_length = @"(?<=求*[^d])((d+.d+)|(d+-d+)|(d+.?d{0,}-d+.?d{0,})|(d+))(?=米)";
                //匹配车的类型
                reg_car_id = string.Format(@"(冷藏|后八轮或前四后八|零担|s无箱板车|本地车|驳船|60公分栏半挂)(?=车)");
            }
            else                                        //有车求货
            {
                goodsInfoString = ms[2].ToString();
                carInfoString = ms[1].ToString();
                //匹配需要货物数量
                reg_goods_number = @"(?<=求)(((d+.?d{0,})-(d+.?d{0,}))|(d+.d+)|(d+)|大量)";
                //货物单位统一为吨
                reg_goods_unit = string.Format("吨");
                //不限货物类型
                reg_goods_id = string.Empty;   
                //匹配车的数量
                reg_car_number = string.Format(@"(?<=有)(d+-d+|d+|大量)(?=台)");
                //匹配车的长度
补充:软件开发 , C# ,

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,