string pattern = @"【省份】(?<Province>.+?)(\\0\\0\\0|【地区】)";Regex r = new Regex( pattern );
Match m = r.Match( str );while ( m.Success )
{
 Console.WriteLine( m.Groups[ "Province" ].Value );
}
//不太明白\0\0什么意思,字符串结尾还是字符表现的形式?

解决方案 »

  1.   

    补充说明:
    TO  OneDotRed:
    上面的其实【地区】还可以是其它的如:【这里是任何字符】\0\0等为字符串的表现形式
      

  2.   

    假如你的名字总是以“省”为结尾的,试试
    @"【省份】([^省]+省)"
    string[] slist = {"【省份】四川省\0\0\0","【省份】四川省 【地区】","【省份】四川【章名】省 【地区】"}; Regex re = new Regex(@"【省份】([^省]+省)");
    foreach (string s in slist)
    {
    Match m = re.Match(s);
    if (m.Success)
    Console.WriteLine("{0} ==> {1}", s, m.Groups[1].Value);
    }
      

  3.   

    1.“【章名】省”是固定的字符还是“【章名】省”可以为“【任何章名】省”?2. 如果“【省份】四川【章名】省 【地区】”中从“【省份】”到“省 【”中的名称永远不会出现省字,可以用saucer大哥的方法。如果“【省份】四川【章名】省 【地区】”中“【xx地区】”后面不会马上接“省”,且“【”只会出现在上述几种情况(【可作标识符)时,可以使用下面的匹配string pattern = @"【省份】(?<Province>.+?(【[^】]*】省)?)(\\0\\0\\0|【[^】]*】(?!省))";
      

  4.   

    看看这个:
    (【省份】(?<provider>[^省]+【.+】省) 【地区】)|(【省份】(?<provider>[^省]+省) 【地区】)|(【省份】(?<provider>[^省]+\0\0\0))