要求: 字符串 !AIVDM,1,1,,A,19NS>F002w8iJ8pAN1bTt3pF087B,0*59$Check
用正则表达式找出开头为 "!"或"$" 结尾倒数第3个字符为"*" 并且最后两位是一16进制数或最后为Check上面那个字符串可以分成两个
 !AIVDM,1,1,,A,19NS>F002w8iJ8pAN1bTt3pF087B,0*59
 $Check

解决方案 »

  1.   

    ...需求不明......
    (?i)!.*?\*[0-9A-F]{2}(?=\$)|\$.*check
    可以得到你给的字符串想要的东西...但最好再明确你的需求...
      

  2.   


    void Main()
    {
     string s=@" !AIVDM,1,1,,A,19NS>F002w8iJ8pAN1bTt3pF087B,0*59$Check"; foreach(Match m in Regex.Matches(s,@"[!$][^!$]*(?:[0-9A-F]{2}|Check)"))
    {
        Console.WriteLine(m.Value);
     
    }

    /*
    !AIVDM,1,1,,A,19NS>F002w8iJ8pAN1bTt3pF087B,0*59
    $Check 
    */
    }
      

  3.   

    ^[\!\$]{1}_*\*_(([0-9A-F]{2})|(Check))$   感觉有点乱啊,对的可能行不大,有兴趣了试试。
      

  4.   

    (?i)[!$][^!$]*(?:[0-9A-F]{2}|Check)最好加个忽略大小写为好
      

  5.   

    需求不明, 我再描述一下
    !AIVDM,1,1,,A,19NS>F002w8iJ8pAN1bTt3pF087B,0*59$Check起始字符为: '!'或'$' 结尾为'Check'或 '0*'+十六进制的数如上面的这个就可以分解为
    !AIVDM,1,1,,A,19NS>F002w8iJ8pAN1bTt3pF087B,0*59
    $Check
      

  6.   

    [code=C# ]MatchCollection mc = Regex.Matches(your_str,@"(?i)!.+?\*[a-f0-9]{2}|\$check");
    foreach(Match m in mc)
    {
        m.Value;//你要的
    }[/code]
      

  7.   

    MatchCollection mc = Regex.Matches(your_str,@"(?i)!.+?\*[a-f0-9]{2}|\$check"); 
    foreach(Match m in mc) 

        m.Value;//你要的 
    }