string tl="46-48(-1)→48-3(02)→3-80(01)→80-4(-1)→4";
现在我想得到
string tl1="46→48→3→80→4";
string tl2="46→48→3(02)→80(01)→4";
得到下面的也行
string tl1="46-48-3-80-4";
string tl2="46-48-3(02)-80(01)-4";

解决方案 »

  1.   

    第一个:string str = "46-48(-1)→48-3(02)→3-80(01)→80-4(-1)→4";
    string result = Regex.Replace(str, "-.+?(?=→)", "");
    MessageBox.Show(result);
      

  2.   

    参考如下代码:
    string tl = "46-48(-1)→48-3(02)→3-80(01)→80-4(-1)→4";
    string tl1 = Regex.Replace(tl, @"-\d+\(-*\d+\)", ""); //46→48→3→80→4
    Console.WriteLine(tl1);
    string tl2 = Regex.Replace(tl, @"-\d+\(-\d+\)", ""); //46→48-3(02)→3-80(01)→80→4
    tl2 = Regex.Replace(tl2, @"-(\d+\(\d+\))→\d+", "→$1"); //46→48→3(02)→80(01)→4
    Console.WriteLine(tl2);        
    tl2分两步
      

  3.   

    哈,第二个有点投机取巧,其实也是两步string tl = "46-48(-1)→48-3(02)→3-80(01)→80-4(-1)→4";
    string tl1 = Regex.Replace(tl, @"-\d+\([^)]*\)", "");
    string tl2 = Regex.Replace(tl.Replace("-", "→"), @"→\d+\(→\d+\)", "");
    Console.WriteLine(tl1);
    Console.WriteLine(tl2);
      

  4.   

    zswang可以说下→$1的用法或作用吗?
    root_你的第二个和我的要求不一样。
      

  5.   

    谁给解释下tl2 = Regex.Replace(tl2, @"-(\d+\(\d+\))→\d+", "→$1"); 
    我知道$是与字符串结束的地方匹配,不匹配任何字符。但还是不理解"→$1".
      

  6.   

    [code=BatchFile]$N就表示第N个括号里的内容,如:
    (1)(2)(3) ...
    $1 $2 $3  ...也可以取别名,对应就是${...},如:
    (?<Name>\w+)
    ${Name}[/code]这个你可以搜一下正则资料获取更详细的信息。
      

  7.   

    不好意识,误点了帖子加分,本来应该给zswang多点的,怎么加到root_上去了。