我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#正则表达式与HashTable详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#正则表达式与HashTable详解

1、正则表达

Regular Expressiong,Regex、Regexp

常见语法:

  • 字符匹配
  • 重复匹配
  • 字符定位
  • 转义匹配

其他高级语法(字符分组、字符替换和字符决策)

正则表达式软件:RegEx Tester

匹配规则

  • 原样匹配

元字符匹配:

  • 原样匹配的时候,采用的都是不变的直接量字符
  • 采用元字符可以匹配一类字符,元字符可以是一个单独的字符,也可以是一对(前一个字符通常是反斜杠)元字符:

正则表达式 

  • [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(要判断的字符串,正则表达式)

using System;
using System.Text.RegularExpressions;
namespace 正则表达式的构建及匹配
{
    class Program
    {
        static void Main(string[] args)
        {
            //判断是否为北京市固定电话,区号为010,民用电话号码为7-8位

            string pattern = @"^(010|010-)\d{7,8}$";  //判定的模式
            string[] input = { "010-12345678", "01023415678", "01098765897", "031078965476" };
            Console.WriteLine("静态方法");
            foreach (string outstr in input)
            {
                bool mybool = Regex.IsMatch(outstr.Trim(),pattern);
                if(mybool)
                {
                    Console.WriteLine(outstr+"是北京固话");
                }
                else
                {
                    Console.WriteLine(outstr+"不是北京市固话");
                }
            }
            //实例化的方式
            Console.WriteLine("实例化方式");
            foreach (string outstr in input)
            {
                Match mymatch = Regex.Match(outstr.Trim(), pattern);
                if (mymatch.Success)
                {
                    Console.WriteLine(outstr + "是北京固话");
                }
                else
                {
                    Console.WriteLine(outstr + "不是北京市固话");
                }
            }
            Console.ReadKey();
        }
    }
}

正则表达式的替换

格式:Regex.Replace(要搜索匹配项的字符串,要替换的原字符串,替换后的字符串);

using System;
using System.Text.RegularExpressions;

namespace 正则表的是的替换
{
    class Program
    {
        static void Main(string[] args)
        {
            //将www.替换为http://www.
            string mystr = "Welcome to www.darly.net WWW.darly.com WwW.darly.org";
            string pattern = @"\bw{3}\.\w+\.(com|net|org)\b";
            string replacement1 = @"http://$&";  //$&匹配的内容
            string replacement2 = "\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));
            Regex myregex = new Regex(pattern,RegexOptions.IgnoreCase);
            string result = myregex.Replace(mystr, replacement2);
            Console.WriteLine("替换后的字符串3" +result);

            Regex myregex4 = new Regex(pattern,RegexOptions.IgnoreCase);
            string result4 = myregex4.Replace(mystr, replacement2);
            Console.WriteLine("替换后的字符串4" + result4);

            string pattern5 = @"\bw{3}\.";
            string replacement5 = "\n" + @"http://www.";
            Console.WriteLine("替换后的字符串5" + Regex.Replace(mystr,pattern5,replacement5,RegexOptions.IgnoreCase));

            Console.ReadLine();
        }
    }
}

正则表达式拆分

要通过正则表达式拆分字符串,就要通过Regex类的Split方法,格式为:
Regex.Split(要拆分的字符串,要匹配的正则表达式模式)

using System;
using System.Text.RegularExpressions;
namespace 正则表达式的拆分
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "一、张三 二、李四 三、王五 四、赵六";
            string patern = @"\b[一二三四]、";
            Console.WriteLine(Type.GetType((Regex.Split(input, patern)).ToString()));
            foreach (string outstr in Regex.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优点 :把数据的存储和查找的时间大降低几乎可以看成是常数时间;而代价仅仅小号比较多的内容。然而在当前可利用内存越来越多的情况下,用空间换取时间的做法是可取的。另外,编码比较容易也是他的特点之一。

声明格式:
引入命名空间:using System.Collections;

元素添加方法 Add

using System;
using System.Collections;
namespace Hasehtable1
{
    class Program
    {
        static void Main(string[] args)
        {
            Hashtable ht = new Hashtable();
            ht.Add("name", "darly");
            ht.Add("gender", "男");
            ht[3] = "王五";  //用此种方式一堆Hashtable去增加元素时应该注意
            //如果对应的键key存在只是达到一种重新赋值的结果,如果不存在才会增加对应键值对
            ht["gender"] = "女";
            //数组通过length可以确定长度
            //集合是通过count来确定个数
            Console.WriteLine(ht.Count);
            Console.ReadKey(); 

        }
    }
}

Hashtable遍历

遍历用到DictionaryEntry(字典键/值对)

using System;
using System.Collections;
namespace Hasehtable1
{
    class Program
    {
        static void Main(string[] args)
        {
            Hashtable ht = new Hashtable();
            ht.Add("name", "darly");
            ht.Add("gender", "男");
            ht[3] = "王五";  //用此种方式一堆Hashtable去增加元素时应该注意
            //如果对应的键key存在只是达到一种重新赋值的结果,如果不存在才会增加对应键值对
            ht["gender"] = "女";
            ht["department"] = "测试部";

            //数组通过length可以确定长度
            //集合是通过count来确定个数
            Console.WriteLine(ht.Count);
            foreach(object myobj in ht)
            {
                Console.WriteLine(myobj);  //此处仅仅输入的是类型
            }
            foreach (DictionaryEntry myobj in ht)
            {
                Console.WriteLine("键为:{0},值为:{1}",myobj.Key,myobj.Value);
            }
            foreach(object myobj in ht.Keys)
            {
                Console.WriteLine("键为:{0};值为{1}", myobj,ht[myobj]);
            }
            Console.ReadKey(); 

        }
    }
}

Hashtable元素的删除

  • Remove
  • Clear
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Hashtable元素删除
{
    class Program
    {
        static void Main(string[] args)
        {
            Hashtable ht = new Hashtable();
            ht.Add(1, "张飒");
            ht.Add(true,"李四");
            ht.Add(false, "王五");
            ht.Add(3, "赵六");
            foreach(DictionaryEntry myde in ht)
            {
                Console.WriteLine("键为{0},值为:{1}", myde.Key, myde.Value);

            }
            //删除Remove
            ht.Remove(false);
            Console.WriteLine("移除结果");
            foreach (DictionaryEntry myde in ht)
            {
                Console.WriteLine("键为{0},值为:{1}", myde.Key, myde.Value);

            }
            //删除Clear,删除所有内容
            ht.Clear();
            Console.WriteLine("清除结果");
            foreach (DictionaryEntry myde in ht)
            {
                Console.WriteLine("键为{0},值为:{1}", myde.Key, myde.Value);

            }
            Console.ReadLine();

        }
    }
}

HashTable元素查找

Hashtable特点:键与值成对存在,键时唯一的不能重复的,在查找元素的时候,我们往往是依据键查找值的。
三种方法:(前两种方法是实质是一样的)

  • Contains
  • ContainsKey
  • ContainsValue
using System;
using System.Collections;
namespace Hashtable元素查找
{
    class Program
    {
        static void Main(string[] args)
        {
            Hashtable ht = new Hashtable();
            ht.Add(1, "张三");
            ht.Add(2, "里斯");
            ht.Add(3, "王五");
            ht.Add(4, "赵六");
            ht[5] = "何七";
            ht[6] = "张三";
            Console.WriteLine("添加的结果");
            foreach(DictionaryEntry myde in ht)
            {
                Console.WriteLine("键为{0}——职位{1}", myde.Key, myde.Value);

            }
            //元素查找
            if(ht.ContainsKey(1))   //ContainsKey()存在返回true,不存在返回false
                Console.WriteLine("存在键=1的元素");
            else Console.WriteLine("不存在该该键");
            if (ht.ContainsValue("张三")) Console.WriteLine("存在值为张三的元素");
            else Console.WriteLine("不存在值为张三的元素");
            Console.Read();
        }
    }
}

任务小结

统计指定字符串(字符串可自行声明)中汉字的个数以及每个汉字出现的次数,将其输出到屏幕上

编程思路:

  • 判断汉字,可以通过正则表达式
  • 然后可将对应汉字存入ArrayList中
  • 通过一定的运算规则,计算出汉字的个数与出现的次数并将结果对应存入Hashtable
  • 遍历Hashtable即可完成任务实施
using System;
using System.Text.RegularExpressions;
using System.Collections;
namespace 任务小结
{
    class Program
    {
        static void Main(string[] args)
        {
            //统计指定字符串(字符串可自行声明)中汉字的个数以及每个汉字出现的次数,将其输出到屏幕上
            Console.WriteLine("请输入一个字符串,系统将自动计算汉字个数以及每个汉字的出现次数");
            string mystr = Console.ReadLine();
            string pattern = @"[^\u4e00-\u9fa5]";  //判定非汉字的字符,将非汉字的字符替换掉就是全部的汉字
            Regex myregex = new Regex(pattern);
            string chnstr = myregex.Replace(mystr, "");
            Hashtable ht = new Hashtable();
            for (int i = 0; i < chnstr.Length; i++)
            {
                int val = 1;
                if(ht.ContainsKey(chnstr[i]))
                {
                   val = Convert.ToInt32(ht[chnstr[i]]);
                    ++val;
                    ht[chnstr[i]] = val;
                }
                else
                {
                    ht.Add(chnstr[i], val);
                }
            }
            Console.WriteLine("原有的字符串是:" + mystr);
            foreach (DictionaryEntry de in ht)
            {
                Console.WriteLine("汉字{0}出现了{1}次",de.Key,de.Value);
            }
            Console.ReadKey();
        }
    }
}

到此这篇关于C#正则表达式与HashTable详解的文章就介绍到这了,更多相关C# 正则表达式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#正则表达式与HashTable详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Ruby正则表达式详解

正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找字符串集合,这篇文章纤细介绍了Ruby大的正则表达式,文章有详细的代码示例,需要的朋友可以参考一下
2023-05-15

Java 正则表达式详解

正则表达式(Regular Expression),又称为正规表达式、规则表达式、常规表示法等,是一种用来匹配、查找和替换字符串的工具。它的语法和规则相对复杂,但却非常强大和灵活。在Java中,可以使用java.util.regex包中的类
2023-08-16

Python中使用正则表达式及正则表达式匹配规则详解

这篇文章主要介绍了Python中使用正则表达式以及正则表达式匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-22

Python中正则表达式详解

基础篇 正则表达式在python中运用的非常多,因为他可以进行任意的匹配,可以匹配我们想要提取的信息。当我们接触正则的时候你就会知道正则的强大。正则有一个库re 在一些工程中我们会经常调用正则的库来做与匹配相关的问题。 字符串是编程时涉及到
2022-06-04

C#正则表达式怎么理解

这篇文章主要讲解了“C#正则表达式怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#正则表达式怎么理解”吧!到目前为止,许多的编程语言和工具都包含对正则表达式的支持,当然.NET也不
2023-06-17

正则表达式Regular Expression (RegExp)详解

正则表达式(Regular Expression,RegExp)是一种用于匹配和操作文本的表达式。它是一种强大的工具,可以用来查找、替换、提取和验证各种文本模式。正则表达式由字符和特殊字符组成。字符可以是普通的字母、数字和标点符号,特殊字符
2023-08-16

正则表达式grep用法详解

grep是一个强大的文本搜索工具,它使用正则表达式来搜索和匹配文本。下面是grep的一些常用用法详解:1. 基本用法:grep pattern file这个命令会在文件中搜索匹配指定模式的行,并将其打印出来。pattern是一个正则表达式,
2023-08-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录