字符串构成:“汽车品牌+零件”。例如:
字符串1:奥迪轮胎
字符串2:奇瑞前挡风玻璃
字符串3:吉利雨刷
字符串4:雪铁龙排气管
字符串5:斯柯达发动机假定汽车品牌除了“雪铁龙”和“斯柯达”以外,都是两个字。
零件的长度不确定,可能比较长。
只有中文,并且没有任何空格。现在要求用正则表达式将汽车品牌和零件区分开。“汽车品牌”的正则表达式很容易写:
^(斯柯达|雪铁龙|\w{2})那么怎样提取出“零件”的部分呢?
我尝试过:
(?<=^(斯柯达|雪铁龙|\w{2}))\w*$
不行,居然会将 \w{2} 优先,导致无法匹配“斯柯达”这样三个字的品牌。并且,不能利用“汽车品牌”得出的字符串参与后面的正则表达式,要用纯粹的正则表达式求解出零件部分。求各位帮帮忙吧。正则表达式

解决方案 »

  1.   

    Try
    (?<=^(斯柯达|雪铁龙|\w{2}))[\u4e00-\u9fa5]*$
      

  2.   

    正则是啊,wuyazhe说得有理。你需要一个存储品牌和零件的标示
      

  3.   


    如果都是2个字,还不如不用正则,直接Substring或者left,然后区别对待仨个字的
      

  4.   

    刚帮你抓了汽车之家的品牌列表。你可以拼个字符串,定义如下为品牌:
    阿尔法罗密欧
    阿斯顿
    奥迪
    巴博斯
    宝骏
    宝马
    保时捷
    北京汽车
    北汽威旺
    北汽制造
    奔驰
    奔腾
    本田
    比亚迪
    标致
    别克
    宾利
    布加迪
    昌河
    长安
    长安商用
    长城
    川汽野马
    DS
    大发
    大众
    道奇
    东风
    东风风神
    东风小康
    东南
    Fisker
    法拉利
    菲亚特
    丰田
    风行
    福迪
    福特
    福田
    GMC
    观致
    广汽传祺
    哈飞
    哈弗
    海格
    海马
    悍马
    恒天
    红旗
    华普
    华泰
    黄海
    Jeep
    吉奥
    吉利
    吉利帝豪
    吉利全球鹰
    吉利英伦
    江淮
    江铃
    捷豹
    金杯
    KTM
    卡尔森
    开瑞
    凯佰赫
    凯迪拉克
    科尼赛克
    克莱斯勒
    LUXGEN
    兰博基尼
    劳斯莱斯
    雷克萨斯
    雷诺
    理念
    力帆
    莲花汽车
    猎豹汽车
    林肯
    铃木
    陆风
    路虎
    路特斯
    MG
    MINI
    马自达
    玛莎拉蒂
    迈巴赫
    迈凯伦
    纳智捷
    讴歌
    欧宝
    欧朗
    帕加尼
    奇瑞
    启辰
    起亚
    日产
    荣威
    如虎
    瑞麒
    Scion
    smart
    SPIRRA
    SSC
    萨博
    三菱
    上汽大通
    绅宝
    世爵
    双环
    双龙
    思铭
    斯巴鲁
    斯柯达
    TESLA
    腾势
    威麟
    威兹曼
    沃尔沃
    沃克斯豪尔
    五菱汽车
    西雅特
    现代
    雪佛兰
    雪铁龙
    一汽
    英菲尼迪
    永源
    中华
    中兴
    众泰
    自制
      

  5.   

    你其实可以换个方法处理  bool IsMatch = false;
                Dictionary<string, string> newdic = new Dictionary<string, string>();
                string pattern1 = @"^(斯柯达|雪铁龙)([\u4e00-\u9fa5]*)$";
                string pattern2 = @"^(\w{2})([\u4e00-\u9fa5]*)$";
                if (Regex.IsMatch(htmlSource, pattern1))
                {
                    IsMatch = true;
                    newdic.Add(Regex.Match(htmlSource, pattern1).Groups[1].Value, Regex.Match(htmlSource, pattern1).Groups[2].Value);
                }
                else
                {
                    if (Regex.IsMatch(htmlSource, pattern2))
                    {
                        IsMatch = true;
                        newdic.Add(Regex.Match(htmlSource, pattern2).Groups[1].Value, Regex.Match(htmlSource, pattern2).Groups[2].Value);
                    }
                }
                if (IsMatch)
                {
                    //操作dic
                }
      

  6.   

    (?<=^(斯柯达|雪铁龙|(?!斯柯达|雪铁龙)\w{2}))\w+