看来真的是老了,摘两颗星星用了一年,想当年摘三颗星星也没用这么久
发在技术区就给个小问题吧
我尽量简化一下规则,类似于
http://www.test.com/main.aspx?a=12&b=34
这样的源字符串,参数a一定有且位置固定,要求如果有b=xxx,则替换为b=56,否则在结尾添加 &b=56,也就是
源字符串                                            期望结果
http://www.test.com/main.aspx?a=12&b=34             http://www.test.com/main.aspx?a=12&b=56
http://www.test.com/main.aspx?a=12                  http://www.test.com/main.aspx?a=12&b=56
某天在一个帖子里看到的类似问题,我尽可以有各种方法来实现以上需求,但我的要求是,补全如下代码
string result = Regex.Replace(str, ...);
我要最简洁,最有创意的代码PS1:事实上我也没有太仔细的去考虑怎么样写才算简洁哈PS2:提前祝大家元旦快乐!新年快乐!

解决方案 »

  1.   

                string Regex = "http://www.test.com/main.aspx?a=12";
                if (Regex.IndexOf('&', 0) > 0)
                {
                    Regex = Regex.Remove(Regex.IndexOf('&', 0)) + "&b=56";
                }
                else
                {
                    Regex = Regex + "&b=56";
                }
      

  2.   

     一定要Replace()就这样           string Regex = "http://www.test.com/main.aspx?a=12&b=45";
                string r;
                int i=Regex.IndexOf('&', 0);
                if ( i> 0)
                {
                    r = Regex.Substring(i, 5);                Regex= Regex.Replace(r,"&b=56");
                }
                else
                {
                    Regex = Regex + "&b=56";
                }
      

  3.   

    先恭喜了
    string result = Regex.Replace(str,"(?<=a=[0-9]+)(?:&b=[0-9]+)?","&b=56");
      

  4.   


    搞错了。。string result = Regex.Replace(str,"(?<=a=[0-9]+)(?:&b=[0-9]+)?(?=\\b)","&b=56");
      

  5.   

    呵呵,不错,但是也只能是一个&符号。要是有个?a=1&b=2&c=3,这样的,就把参数c也删了。
      

  6.   

    str = str.Split('&')[0] + "&b=56";
      

  7.   

    如果说,还会出现&c=XXX,而一旦原字符串里没有b=XXX,就要加在最后面的话,那就:
    string result = Regex.Replace(str,"(?<=a=[0-9]+)&b=[0-9]+(?=\\b)|(?<=a=[0-9]+(?:(?!&b=[0-9]+)[^\\s])*)(?=\\s|$)","&b=56");
      

  8.   

    恭喜生星,题我就不看了,我才接触.net几天
      

  9.   

    我现在来回答root_兄的那个问题,不过有个地方root_兄没说清楚,就是没有说b的位置固不固定(是不是一定跟在a=22&后面),那就写个吧:
    string result = Regex.Replace(str,"a=([0-9]+)((&\\w+=[0-9]+){0,})(&b=[0-9]+)?","a=$1$2&b=56")
    不知道还有没列简单的写法?不过比止戈兄的短点^_^
      

  10.   

    想到另外一种方法:string result = Regex.Replace(str,"&b=[0-9]+","")+"&b=56";不知道够不够简洁?
      

  11.   


    这个有问题啊。。如果b=XXX已经存在,是不会替换的,而是在最后加上&b=56
    可以改成:
    string result = Regex.Replace(str,"a=([0-9]+)((&(?:(?!b)\\w)+=[0-9]+)*)(&b=[0-9]+)?","a=$1$2&b=56");
      

  12.   


    这个只适用于str是单独一个地址时。。
      

  13.   

    Response.Redirect(string.Format("xxx.aspx?a={0}&b=56",Request["a"]))