




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C#正则表达式与HashTable详解目录1、正则表达匹配规则转义字符限定字符分组()2、C#中正则表达式构建与匹配正则表达式的替换正则表达式拆分HashTable概述及元素添加Hashtable遍历Hashtable元素的删除HashTable元素查找任务小结
1、正则表达
RegularExpressiong,Regex、Regexp
常见语法:
字符匹配重复匹配字符定位转义匹配
其他高级语法(字符分组、字符替换和字符决策)
正则表达式软件:RegExTester
匹配规则
元字符匹配:
原样匹配的时候,采用的都是不变的直接量字符采用元字符可以匹配一类字符,元字符可以是一个单独的字符,也可以是一对(前一个字符通常是反斜杠)元字符:
正则表达式
[a-zA-Z]:匹配a到z的任意字符[0-9]:匹配0到9的任意数字
转义字符
如果想查找元字符本身,就必须采用\配合对应院子符来取消特定字符。
如果想查找\或.就采用\或.
限定字符
限定字符又叫重复描述字符,标识一个字符要出现的次数
分组()
Ip地址正则表达式:
Ip地址匹配(需验证)
((25[0-5]|2[0-4]\d|[01]\d\d)\.){3}(25[0-5]|2[0-4]\d|[01]\d\d)
删除空行:^[\s\t]*\n
2、C#中正则表达式构建与匹配
使用方法:
引用命名空间System.Text.RegularExpressions构造正则表达式在使用正则表达式时,要先构造正则表达式,这就用到了Regex类。
其构建方式有两种:
基本形式:Regex(正则表达式)重载形式:Regex(正则表达式,匹配选项)
其中匹配选项提供一些特殊的帮助,是一个枚举值,包括下面六个值:
IgnoreCase(忽略大小写)ReghtToLeft(从右向左)None(默认)CultureInvariant(忽略区域)MultLine(多行模式)SingleLine(单行模式)
在Regex类中包含IsMatch(),Replace(),Split()等
IsMatch():测试字符是否满足正则表达式,返回一个布尔值,验证用户输入的数据是否满足条件(例如是否为合法手机号,是否为合法邮箱等)。
IsMatch()的使用格式:Regex.IsMatch(要判断的字符串,正则表达式)
usingSystem;
usingSystem.Text.RegularExpressions;
namespace正则表达式的构建及匹配
classProgram
staticvoidMain(string[]args)
//判断是否为北京市固定电话,区号为010,民用电话号码为7-8位
stringpattern=@"^(010|010-)\d{7,8}$";//判定的模式
string[]input={,"01023415678","01098765897","031078965476"};
Console.WriteLine("静态方法");
foreach(stringoutstrininput)
boolmybool=Regex.IsMatch(outstr.Trim(),pattern);
if(mybool)
Console.WriteLine(outstr+"是北京固话");
else
Console.WriteLine(outstr+"不是北京市固话");
//实例化的方式
Console.WriteLine("实例化方式");
foreach(stringoutstrininput)
Matchmymatch=Regex.Match(outstr.Trim(),pattern);
if(mymatch.Success)
Console.WriteLine(outstr+"是北京固话");
else
Console.WriteLine(outstr+"不是北京市固话");
Console.ReadKey();
}
正则表达式的替换
格式:Regex.Replace(要搜索匹配项的字符串,要替换的原字符串,替换后的字符串);
usingSystem;
usingSystem.Text.RegularExpressions;
namespace正则表的是的替换
classProgram
staticvoidMain(string[]args)
//将www.替换为http://www.
stringmystr="WelcometoWWW.WwW.";
stringpattern=@"\bw{3}\.\w+\.(com|net|org)\b";
stringreplacement1=@"http://$//$匹配的内容
stringreplacement2="\n"+@"http://$//$匹配的内容,此种方式只是将响应的字符拼接到匹配的字符串前面,
Console.WriteLine("替换前的字符串"+mystr);
Console.WriteLine("替换后的字符串1-1"+Regex.Replace(mystr,pattern,replacement1));
Console.WriteLine("替换后的字符串2-1"+Regex.Replace(mystr,"www.",@"http://www."));//此种方式是将匹配的内容替换成目标字符
Console.WriteLine("替换后的字符串1_2"+Regex.Replace(mystr,pattern,replacement2,RegexOptions.IgnoreCase));
Console.WriteLine("替换后的字符串2-2"+Regex.Replace(mystr,"www.","\n"+@"http://www.",RegexOptions.IgnoreCase));
Regexmyregex=newRegex(pattern,RegexOptions.IgnoreCase);
stringresult=myregex.Replace(mystr,replacement2);
Console.WriteLine("替换后的字符串3"+result);
Regexmyregex4=newRegex(pattern,RegexOptions.IgnoreCase);
stringresult4=myregex4.Replace(mystr,replacement2);
Console.WriteLine("替换后的字符串4"+result4);
stringpattern5=@"\bw{3}\.";
stringreplacement5="\n"+@"http://www.";
Console.WriteLine("替换后的字符串5"+Regex.Replace(mystr,pattern5,replacement5,RegexOptions.IgnoreCase));
Console.ReadLine();
}
正则表达式拆分
要通过正则表达式拆分字符串,就要通过Regex类的Split方法,格式为:
Regex.Split(要拆分的字符串,要匹配的正则表达式模式)
usingSystem;
usingSystem.Text.RegularExpressions;
namespace正则表达式的拆分
classProgram
staticvoidMain(string[]args)
stringinput="一、张三二、李四三、王五四、赵六";
stringpatern=@"\b[一二三四]、";
Console.WriteLine(Type.GetType((Regex.Split(input,patern)).ToString()));
foreach(stringoutstrinRegex.Split(input,patern))
if(!string.IsNullOrEmpty(outstr))Console.WriteLine(outstr);
Console.ReadKey();
}
HashTable概述及元素添加
HashTable也被称作为哈希表,键值对或者关联数组。
用于处理和表写类似Ken/value的减值对,其中Key通常可用来快速查找,同时Key是区分大小写;Value用于存储对应于Key的值。HashTable中key/value键值对均为Object类型,所有HashTable可以支持任何类型的Key/Value键值对。
Hashtable特点:键与值成对存在,键时唯一的不能重复的
HashTable中的每个元素时一个存储在DictionaryEntry对象中的键值对
HashTable优点:把数据的存储和查找的时间大降低几乎可以看成是常数时间;而代价仅仅小号比较多的内容。然而在当前可利用内存越来越多的情况下,用空间换取时间的做法是可取的。另外,编码比较容易也是他的特点之一。
声明格式:
引入命名空间:usingSystem.Collections;
元素添加方法Add
usingSystem;
usingSystem.Collections;
namespaceHasehtable1
classProgram
staticvoidMain(string[]args)
Hashtableht=newHashtable();
ht.Add("name","darly");
ht.Add("gender","男");
ht[3]="王五";//用此种方式一堆Hashtable去增加元素时应该注意
//如果对应的键key存在只是达到一种重新赋值的结果,如果不存在才会增加对应键值对
ht["gender"]="女";
//数组通过length可以确定长度
//集合是通过count来确定个数
Console.WriteLine(ht.Count);
Console.ReadKey();
}
Hashtable遍历
遍历用到DictionaryEntry(字典键/值对)
usingSystem;
usingSystem.Collections;
namespaceHasehtable1
classProgram
staticvoidMain(string[]args)
Hashtableht=newHashtable();
ht.Add("name","darly");
ht.Add("gender","男");
ht[3]="王五";//用此种方式一堆Hashtable去增加元素时应该注意
//如果对应的键key存在只是达到一种重新赋值的结果,如果不存在才会增加对应键值对
ht["gender"]="女";
ht["department"]="测试部";
//数组通过length可以确定长度
//集合是通过count来确定个数
Console.WriteLine(ht.Count);
foreach(objectmyobjinht)
Console.WriteLine(myobj);//此处仅仅输入的是类型
foreach(DictionaryEntrymyobjinht)
Console.WriteLine("键为:{0},值为:{1}",myobj.Key,myobj.Value);
foreach(objectmyobjinht.Keys)
Console.WriteLine("键为:{0};值为{1}",myobj,ht[myobj]);
Console.ReadKey();
}
Hashtable元素的删除
RemoveClear
usingSystem;
usingSystem.Collections;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceHashtable元素删除
classProgram
staticvoidMain(string[]args)
Hashtableht=newHashtable();
ht.Add(1,"张飒");
ht.Add(true,"李四");
ht.Add(false,"王五");
ht.Add(3,"赵六");
foreach(DictionaryEntrymydeinht)
Console.WriteLine("键为{0},值为:{1}",myde.Key,myde.Value);
//删除Remove
ht.Remove(false);
Console.WriteLine("移除结果");
foreach(DictionaryEntrymydeinht)
Console.WriteLine("键为{0},值为:{1}",myde.Key,myde.Value);
//删除Clear,删除所有内容
ht.Clear();
Console.WriteLine("清除结果");
foreach(DictionaryEntrymydeinht)
Console.WriteLine("键为{0},值为:{1}",myde.Key,myde.Value);
Console.ReadLine();
}
HashTable元素查找
Hashtable特点:键与值成对存在,键时唯一的不能重复的,在查找元素的时候,我们往往是依据键查找值的。
三种方法:(前两种方法是实质是一样的)
ContainsContainsKeyContainsValue
usingSystem;
usingSystem.Collections;
namespaceHashtable元素查找
classProgram
staticvoidMain(string[]args)
Hashtableht=newHashtable();
ht.Add(1,"张三");
ht.Add(2,"里斯");
ht.Add(3,"王五");
ht.Add(4,"赵六");
ht[5]="何七";
ht[6]="张三";
Console.WriteLine("添加的结果");
foreach(DictionaryEntrymydeinht)
Console.WriteLine("键为{0}——职位{1}",myde.Key,myde.Value);
//元素查找
if(ht.ContainsKey(1))//ContainsKey()存在返回true,不存在返回false
Console.WriteLine("存在键=1的元素");
elseConsole.WriteLine("不存在该该键");
if(ht.ContainsValue("张三"))Console.WriteLine("存在值为张三的元素");
elseConsole.WriteLine("不存在值为张三的元素");
Console.Read();
}
任务小结
统计指定字符串(字符串可自行声明)中汉字的个数以及每个汉字出现的次数,将其输出到屏幕上
编程思路:
判断汉字,可以通过正则表达式然后可将对应汉字存入ArrayList中通过一定的运算规则,计算出汉字的个数与出现的次数并将结果对应存入Hashtable遍历Hashtable即可完成任务实施
usingSystem;
usingSystem.Text.R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织品设计师职业认证试题及答案
- 推动无人驾驶技术进步的策略与实施路径
- 餐饮环保测试题及答案
- 纺织化学成分分析试题及答案
- 线下合同协议书范本
- 用工协议书与劳务合同
- 货物合同变更协议书
- 学徒合同协议书
- 绿色纺织材料的研发趋势试题及答案
- 租船合同协议书
- MOOC 倾听-音乐的形式与审美-武汉大学 中国大学慕课答案
- 第18讲化学键(讲义)(原卷版+解析)
- (正式版)JBT 7248-2024 阀门用低温钢铸件技术规范
- 浆砌片石挡墙施工方案
- (高清版)TDT 1056-2019 县级国土资源调查生产成本定额
- 多臂老虎机问题的强化学习算法
- 国家开放大学《Python语言基础》实验5:循环结构基本应用参考答案
- 关注心理健康助力学生成长
- 农耕文节策划方案
- GSP认证之附录3冷藏冷冻药品储存与运输管理温湿度自动监测
- 南京雨花石知识讲座
评论
0/150
提交评论