.NET正则表达式编程示例

我们通过一个例子来讲解正则表达式编程,先看题:

题目:统计一个txt文档中单词个数及每个单词的出现次数(老题老被人提)

思路:我们统计文档就是解析一个字符串,所以在解析字符串的过程中势必要对字符串内容进行筛选,单词是由字母组成的,所以这就成为筛选字符的条件,而限定条件就需要用正则表达式书写,通过限定条件将字符串分割,将每个单词存入一个ArrayList中,并通过运算这个ArrayList,将单词及出现次数存入HashTable中,然后显示,即完成题目要求。

看代码:

1.读入字符串

StreamReader mysr = new StreamReader("F:\\test\\123.txt");
string str = mysr.ReadToEnd();

 

 2.字符串的截取

public ArrayList CountWord(string str)
        {

            ArrayList alc = new ArrayList();
            Regex reg = new Regex("[^a-zA-Z]");
            string[] strs = reg.Split(str);
            foreach (string ma in strs)
            {
                if (ma != "")
                {
                    alc.Add(ma);
                }
            }

            return alc;
        }

我们需要使用Regex类,在新建对象时需要将正则表达式作为参数传递给Regex对象。然后使用Split方法,它的作用是按照正则表达式所匹配的字符的位置,将字符串在此位置截断,这就是[^a-zA-Z]的原因,然后再对字符串的截取内容进行筛选,去掉空白符,存入ArrayList中。

3.对Arraylist的内容进行统计,达到题目的需求

int k = alc.Count;
            int m = 1;
            int s = 1, j = 0;
            Hashtable ht = new Hashtable();
            while (k != 0)
            {
                while (j != k)
                {
                    for (; s < k; s++)
                    {
                        if (alc[j].ToString() == alc[s].ToString())
                        {
                            alc.RemoveAt(s);
                            m++;
                            k = alc.Count;
                        }
                    }
                    ht.Add(alc[j], m);
                    alc.RemoveAt(j);
                    k = alc.Count;
                    m = 1;
                    s = 1;
                }

            }
            foreach (DictionaryEntry dic in ht)
                Console.WriteLine("{0}:{1}", dic.Key, dic.Value);
            Console.ReadKey();
        }

 

posted @ 2013-06-06 16:04  白菜帮子  阅读(247)  评论(0编辑  收藏  举报