我有如下的数据,    集装箱号,ID号;
INKU6147578,100;ECMU9146728,34578;BHCU4907478,1001;例如,我搜索集装箱号尾数为78的,要求返回结果为INKU6147578,100;BHCU4907478,1001;
我要找箱号尾数为8的,必须返回INKU6147578,100;ECMU9146728,34578;BHCU4907478,1001;
我要找箱号为77的,就返回空字符串请问正则表达式如何写?

解决方案 »

  1.   

    .*?;(?=.*?)BHCU\d{5}78,.*?;
    在家 没有调试 如果错误 还情见谅
      

  2.   

    INKU6147578,100;ECMU9146728,34578;BHCU4907478,1001;
    -------------看数据结构,觉得应该先以’;‘号断句
      

  3.   

    使用正则[a-zA-Z]{4}[^;]*?78,.*?;
    78可以任意替换为你想要的数字
    测试数据INKU6178578,100;ECMU9146728,34578;BHCU4907478,1001;
    正则[a-zA-Z]{4}[^;]*?78,.*?;
    结果
    *******************
    INKU6178578,100;
    *******************
    BHCU4907478,1001;测试数据INKU6178578,100;ECMU9146728,34578;BHCU4907478,1001;
    正则[a-zA-Z]{4}[^;]*?8,.*?;
    结果
    *******************
    INKU6178578,100;
    *******************
    ECMU9146728,34578;
    *******************
    BHCU4907478,1001;
      

  4.   

    [a-zA-Z]{4}\d{7},\d{1,4};//\d{7}的尾部由你自己的搜索目标数字替代
      

  5.   

    petshop4(除了吃饭睡觉 还会点正则) 能否一次性把里头匹配的全部找出来?而不是通过一次次的匹配查找另外,你在上头提到“少用组 少回蒴 少用*”,可是这里头为何用了好几个*号?
    [a-zA-Z]{4}[^;]*?78,.*?;
    jimh(Jimmy)的(?<item>\w+78,\d+;)也验证成功
      

  6.   

    能否一次性把里头匹配的全部找出来?而不是通过一次次的匹配查找
    使用Reges.Matchs()另外,你在上头提到“少用组 少回蒴 少用*”,可是这里头为何用了好几个*号?
    +和*是一个性质 只说少用 没说不用jimh(Jimmy)的(?<item>\w+78,\d+;)也验证成功
    我改改[a-zA-Z]{4}.+?78,\d+;
    因为箱号的总长度是11字节,其中有4字节固定是英文字母,其余为数字
    所以正则做了一下判断
    当然 如果你能确定你匹配的字串都是有4字节固定是英文字母,其余为数字,那jimh的正则就够了
      

  7.   

    如果用(?<item>\w+78,\d+;)
    把组去掉\w+78,\d+;
      

  8.   

    petshop4(除了吃饭睡觉 还会点正则)能否帮我说明一下?\w+78,\d+;
    如何使获取到的宽度就是11个字节的箱号?
      

  9.   

    \w+(1到任意个字母或数字的字串)78,\d+;
    \w与任何单词字符匹配。等效于 Unicode 字符类别 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。如果用 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \w 等效于 [a-zA-Z_0-9]。
    不会获取宽度的
      

  10.   

    你可以这样
    string 你搜索的字串="78";
    int 你搜索的字串的长度=你搜索的字串.Length();
    int temp=8-你搜索的字串的长度;
    string 正则=@"[A-Z]{4}\d{"+temp.ToString()+"}"+你搜索的字串+@",\d+;";
      

  11.   

    不要把简单的问题复杂化用这个 可以严格区分位数
    [a-zA-Z]{4}\d{7}(?<=XX),[^;]*;前4位是字母
    再跟7个数字
    你要查找的字符XX写在(?<=)里面
    后面按实际情况匹配就行了
      

  12.   

    哦不好意思没仔细看 前4位是国际标准而且全是大写 要这样写 还有记得千万别开 IgnoreCase
    [A-Z]{4}\d{7}(?<=XX),[^;]*;
      

  13.   

    这分得的惭愧 gzdiablo()的办法更简单