C#正则表达式与HashTable详解
本攻略将为大家详细介绍C#中正则表达式和HashTable的知识。正则表达式是一种文本匹配的技术,而HashTable则是一种常用的键值对存储实现。本文将从什么是正则表达式和HashTable开始讲解,然后分别介绍它们的使用方法和常见操作,最后给出两个示例说明。
什么是正则表达式?
正则表达式(Regular Expression)是一种文本匹配的方式,它可以用来检索、替换、验证字符串中的文本,和输入框验证等场景中都有广泛应用。
正则表达式通过一系列特殊字符和语法来识别文本模式,匹配某些特定字符或字符串。例如,正则表达式可以用来匹配身份证号码,邮箱地址或者手机号码等。
在C#中,正则表达式是由System.Text.RegularExpressions
命名空间来实现的,可以通过Regex
类来创建和操作正则表达式。下面是一个简单的示例,用来验证输入的字符串是否为手机号码:
using System.Text.RegularExpressions;
...
string input = Console.ReadLine();
string pattern = @"^1[3-9]\d{9}$";
Match result = Regex.Match(input, pattern);
if (result.Success)
{
Console.WriteLine("输入的字符串是一个有效的中国手机号码。");
}
else
{
Console.WriteLine("输入的字符串不是一个有效的中国手机号码。");
}
什么是HashTable?
HashTable是一种常用的键值对存储实现,用来存储一系列键值对,其中键和值都是对象类型。HashTable的特点是可以快速地通过键来查找对应的值,并且在大多数情况下,它比数组或者List容器插入和查找元素的速度快。
在C#中,HashTable是由System.Collections
命名空间来实现的,可以通过Hashtable
类来创建和操作HashTable。下面是一个例子,用来存储一些名字和对应的年龄:
using System.Collections;
...
Hashtable hash = new Hashtable();
hash.Add("Tom", 29);
hash.Add("Lisa", 25);
hash.Add("Bob", 32);
if (hash.ContainsKey("Tom"))
{
int age = (int)hash["Tom"];
Console.WriteLine("Tom的年龄是:" + age);
}
正则表达式的常用操作
正则表达式有很多不同的语法和特殊字符,下面只列举常见的,介绍它们的作用和用法。
字符匹配
特殊字符.
:匹配除换行符之外的所有字符。
string pattern = @".";
bool isMatch = Regex.IsMatch("a", pattern); //true
isMatch = Regex.IsMatch("1", pattern); //true
isMatch = Regex.IsMatch("!", pattern); //true
isMatch = Regex.IsMatch("\n", pattern); //false
字符集[]
:匹配括号中列举的任意一个字符。
string pattern = @"[abc]";
bool isMatch = Regex.IsMatch("a", pattern); //true
isMatch = Regex.IsMatch("b", pattern); //true
isMatch = Regex.IsMatch("c", pattern); //true
isMatch = Regex.IsMatch("d", pattern); //false
isMatch = Regex.IsMatch("ab", pattern); //false
字符范围-
:用在字符集[]
中,表示匹配指定范围内的任意一个字符。
string pattern = @"[a-z]";
bool isMatch = Regex.IsMatch("a", pattern); //true
isMatch = Regex.IsMatch("g", pattern); //true
isMatch = Regex.IsMatch("A", pattern); //false
isMatch = Regex.IsMatch("!", pattern); //false
重复匹配
重复次数{n,m}
:匹配前面的字符/子表达式重复出现n到m次。
string pattern = @"a{2,4}";
bool isMatch = Regex.IsMatch("aa", pattern); //true
isMatch = Regex.IsMatch("aaa", pattern); //true
isMatch = Regex.IsMatch("aaaa", pattern); //true
isMatch = Regex.IsMatch("a", pattern); //false
isMatch = Regex.IsMatch("aaaaa", pattern); //false
贪婪匹配与非贪婪匹配?
:在重复匹配中,贪婪模式下匹配越多越好,非贪婪模式下匹配越少越好。
string pattern = @"a*?";
bool isMatch = Regex.IsMatch("aaa", pattern); //true
isMatch = Regex.IsMatch("a", pattern); //true
isMatch = Regex.IsMatch("", pattern); //true
isMatch = Regex.IsMatch("aaaa", pattern); //true(?)
HashTable的常用操作
HashTable有很多不同的方法和属性,下面只列举常见的,介绍它们的作用和用法。
添加或者修改数据
可以使用Add
方法或者直接索引来添加或者修改数据:
Hashtable hash = new Hashtable();
hash.Add("Tom", 29);
hash["Lisa"] = 25;
查找数据
可以使用ContainsKey
方法和ContainsValue
方法来查找指定的键或值是否存在:
Hashtable hash = new Hashtable();
hash.Add("Tom", 29);
hash.Add("Lisa", 25);
hash.Add("Bob", 32);
bool hasTom = hash.ContainsKey("Tom"); //true
bool has30 = hash.ContainsValue(30); //false
可以使用索引来获取指定键的值:
Hashtable hash = new Hashtable();
hash.Add("Tom", 29);
int age = (int)hash["Tom"];
删除数据
可以使用Remove
方法来删除指定的键值对:
Hashtable hash = new Hashtable();
hash.Add("Tom", 29);
hash.Add("Lisa", 25);
hash.Add("Bob", 32);
hash.Remove("Tom");
示例说明
示例1:验证邮箱地址格式
邮箱地址是一个合法的,符合规范的邮件地址,一般由用户名、@符号和域名三部分组成。下面是一个正则表达式示例,用来验证输入的字符串是否为一个合法的邮箱地址:
using System.Text.RegularExpressions;
...
string input = Console.ReadLine();
string pattern = @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$";
Match result = Regex.Match(input, pattern);
if (result.Success)
{
Console.WriteLine("输入的字符串是一个合法的邮箱地址。");
}
else
{
Console.WriteLine("输入的字符串不是一个合法的邮箱地址。");
}
示例2:统计单词频次
给定一个句子,统计其中每个单词出现的次数。可以使用HashTable来完成这个任务:
using System.Collections;
...
string sentence = "This is a hello world program, hello!";
Hashtable wordCounts = new Hashtable();
string[] words = sentence.Split(' ', ',', '!', '.');
foreach (string word in words)
{
if (wordCounts.ContainsKey(word))
{
wordCounts[word] = (int)wordCounts[word] + 1;
}
else
{
wordCounts.Add(word, 1);
}
}
foreach (string word in wordCounts.Keys)
{
Console.WriteLine("单词\"" + word + "\"出现了" + wordCounts[word] + "次。");
}
以上就是我们对C#正则表达式与HashTable的详细介绍,希望能对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#正则表达式与HashTable详解 - Python技术站