如果字符串包含a,则匹配a
如果字符串包含b,则匹配b
如果字符串既包含a又包含b,则只匹配a
这样的正则如何写?a|b这样写是不行的

解决方案 »

  1.   

    例如有三个字符串fafe432545ceeew,ruijhg-424,fuie4059fjir-784356
    写个正则,要求输出结果是
    1、对于字符串fafe432545ceeew,结果为432545
    2、对于字符串ruijhg-424,结果为424
    3、对于字符串fuie4059fjir-784356,结果为784356
      

  2.   

    如果直接\d+,那么第三个字符串要想匹配到784356,就是Matches[1],而第一个和第二个都是Matches[0]。现在有没有一个正则让我取Matches[0]就能得到我想要的结果。
    就是说如果字符串中有-后面的数字字符且以数字结尾,那么优先得到这串数字,否则看字符串中是否有连续的数字。这就是有限匹配的想法,[^-]\d+$和(?<.*)\d+(?=.+)这两个正则同时放在一个正则表达式中,但是要把[^-]\d+$匹配到的放在最前面,如何实现?
      

  3.   


    Match m = Regex.Match(input,"(?((?=.+[0-9]$))[0-9]+$|[0-9]+)");
    Console.WriteLine(m.Value);
      

  4.   

    优先匹配是这种
    string input="ab";
    Regex re = new Regex("(a|ab)");
    Match m = re.Match(input);
    Console.WriteLine(m.Value); // a
      

  5.   

    对,是为了匹配数字,\d+可以,如果是rewtr324dsafe432fwr这样的就需要匹配第一个,而rewtr324dsafe432fwr-4353则需要匹配最后一个。
    现在想写一个正则,让这两种情况是Mathes[0],这就是我想说的优先的思想。wackyboy给个答案吧,那两个不管用。