写出同时包含abc三个字母(三个字母各出现一次),但不考虑顺序的正则表达式     匹配         不匹配
     
     abcd        abdea
    acbd         bdcc
    cab          db

解决方案 »

  1.   

    这样的业务应该意义不大,如果要判断含有相同字符用Contains
      

  2.   


    出现多次算不算匹配,如 bccda 算匹配还是不匹配?
      

  3.   

    给个样例
    改一下就好
    using System;
    using System.Collections.Generic;
     
    using System.Text;namespace ConsoleApplication67
    {
        class Program
        {
            static void Main(string[] args)
            {
               string a = "abcdefgabc";
               Dictionary<string,int>   myDictionary=CharAndItsNumber(a);
               foreach (KeyValuePair<string, int> kvp in myDictionary)
               {               Console.WriteLine(kvp.Key + ":" + kvp.Value);
               }        }
            private static Dictionary<string ,int> CharAndItsNumber(string str)
            {
                Dictionary<string, int> myDictionary = new Dictionary<string, int>();
               int strLength=str.Length;
               while (strLength > 0)
               {
                   string  firtCharString = str[0].ToString();
                   str = str.Replace(firtCharString, "");
                   int CharNumber = strLength - str.Length;
                   myDictionary.Add(firtCharString, CharNumber);
                   strLength = str.Length;
               }
               return myDictionary;
            }
        }
    }
      

  4.   

    using System;
    using System.Text.RegularExpressions;class Program
    {
      static void Main()
      {
        string[] input = { "abcd", "abdea", "acbd", "bdcc", "cab",  "db" };
        foreach (string s in input)
        { 
          bool Match = Regex.IsMatch(s, @"a") && Regex.IsMatch(s, @"b") && Regex.IsMatch(s, @"c");
          Console.WriteLine("{0}: {1}", s, Match ? "匹配" : "不匹配"); 
        }
      }
    }
    /* 程序输出:
    abcd: 匹配
    abdea: 不匹配
    acbd: 匹配
    bdcc: 不匹配
    cab: 匹配
    db: 不匹配
    */
      

  5.   

    using System;
    using System.Text.RegularExpressions;class Program
    {
      static void Main()
      {
        string[] input = { "abcd", "abdea", "acbd", "bdcc", "cab",  "db", "bccda" };
        foreach (string s in input)
        { 
          bool Match = Regex.IsMatch(s, @"a") && Regex.IsMatch(s, @"b") && Regex.IsMatch(s, @"c")
            && !(Regex.IsMatch(s, @"(?s)a.*a") || Regex.IsMatch(s, @"(?s)b.*b") || Regex.IsMatch(s, @"(?s)c.*c"));
          Console.WriteLine("{0}: {1}", s, Match ? "匹配" : "不匹配"); 
        }
      }
    }
    /* 程序输出:
    abcd: 匹配
    abdea: 不匹配
    acbd: 匹配
    bdcc: 不匹配
    cab: 匹配
    db: 不匹配
    bccda: 不匹配
    */
      

  6.   

    单个正则:
    ^(?:[^abc]*a[^abc]*b[^abc]*c[^abc]*|[^abc]*a[^abc]*c[^abc]*b[^abc]*|[^abc]*b[^abc]*a[^abc]*c[^abc]*|[^abc]*b[^abc]*c[^abc]*a[^abc]*|[^abc]*c[^abc]*a[^abc]*b[^abc]*|[^abc]*c[^abc]*b[^abc]*a[^abc]*)$
    using System;
    using System.Text.RegularExpressions;class Program
    {
      static void Main()
      {
        string[] input = { "abcd", "abdea", "acbd", "bdcc", "cab",  "db", "bccda" };
        string pattern = "^(?:[^abc]*a[^abc]*b[^abc]*c[^abc]*|[^abc]*a[^abc]*c[^abc]*b[^abc]*|[^abc]*b[^abc]*a[^abc]*c[^abc]*|[^abc]*b[^abc]*c[^abc]*a[^abc]*|[^abc]*c[^abc]*a[^abc]*b[^abc]*|[^abc]*c[^abc]*b[^abc]*a[^abc]*)$";
        Regex  r = new Regex(pattern);
        foreach (string s in input)
        { 
          bool Match = r.IsMatch(s);
          Console.WriteLine("{0}: {1}", s, Match ? "匹配" : "不匹配"); 
        }
      }
    }
    /* 程序输出:
    abcd: 匹配
    abdea: 不匹配
    acbd: 匹配
    bdcc: 不匹配
    cab: 匹配
    db: 不匹配
    bccda: 不匹配
    */
      

  7.   

    @"([abc])((?<!\1)[abc])((?<!\1)[abc](?<!\2))"
      

  8.   

    @"^[^abc]*([abc])[^abc]*(?!\1)([abc])[^abc]*(?!\1|\2)[abc][^abc]*$"
      

  9.   

    上面有误,试试这个
    @"([abc])((?!\1)[abc](?!\1))((?!\2)[abc])"
      

  10.   

    using System;
    using System.Text.RegularExpressions;class test
    {
        static void Main()
        {
            string temp = "123abcefgbcacababc";
            Regex rx = new Regex("(abc|acb|bac|bca|cab|cba)");
            Match m = rx.Match(temp);        while (m.Success)
            {
                Console.WriteLine(m.Value);
                m=m.NextMatch();
            }
        }
    }分点分给我啊~~~
      

  11.   

    wuyi8808,谢谢你的赐教,
    你的结果是对的,但不是我需要的那种形式,我想要的是单个正则表达式
      

  12.   


    ^(?=(.*?a))(?=(.*?b))(?=(.*?c))[a-z]+(?<!(.*?a){2,})(?<!(.*?b){2,})(?<!(.*?c){2,})$
      

  13.   

    经测试,下面这个完全OK
    @"([abc])((?!\1)[abc](?!\1))((?!\2)[abc])"
    string str1 = "abcd"; 
    string str2 = "acbd";
    string str3 = "cab"; 
    string str4 = "abdea"; 
    string str5 = "bdcc"; 
    string str6 = "db"; 
    Regex rx = new Regex(@"([abc])((?!\1)[abc](?!\1))((?!\2)[abc])");
    ggg+=rx.IsMatch(str1).ToString();
    ggg+=rx.IsMatch(str2).ToString();
    ggg+=rx.IsMatch(str3).ToString();
    ggg+=rx.IsMatch(str4).ToString();
    ggg+=rx.IsMatch(str5).ToString();
    ggg+=rx.IsMatch(str6).ToString();最后ggg=TrueTrueTrueFalseFalseFalse
      

  14.   

    [Quote=引用 10 楼 wuyi8808 的回复:]
    单个正则: 
    ^(?:[^abc]*a[^abc]*b[^abc]*c[^abc]*|[^abc]*a[^abc]*c[^abc]*b[^abc]*|[^abc]*b[^abc]*a[^abc]*c[^abc]*|[^abc]*b[^abc]*c[^abc]*a[^abc]*|[^abc]*c[^abc]*a[^abc]*b[^abc]*|[^abc]*c[^abc]*b[^abc]*a[^abc]*)$ 
    好长啊!
      

  15.   

    经测试,下面这个完全OK 
    @"([abc])((?!\1)[abc](?!\1))((?!\2)[abc])" 
      

  16.   

    19楼的兄弟,你给的正则好像有点问题,比如“bacbd”用你那个匹配返回是 true,其实这个字符串是不匹配的,'a'、'b'、'c'这
    三个字母只能出现一次
      

  17.   

    抱歉.理解你的题目有点偏差,我以为只要输出abc acb bca这类型的三连字符呢.改进一下,测试OK
    @"^[^abc]*([abc])[^abc]*((?!\1)[abc])[^abc]*((?!\1)(?!\2)[abc])[^abc]*$"