.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(); }