广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#正则表达式与HashTable详解
  • 422
分享到

C#正则表达式与HashTable详解

2024-04-02 19:04:59 422人浏览 安东尼
摘要

目录1、正则表达匹配规则转义字符限定字符分组()2、C#中正则表达式构建与匹配正则表达式的替换正则表达式拆分HashTable概述及元素添加Hashtable遍历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# 正则表达式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C#正则表达式与HashTable详解

本文链接: https://www.lsjlt.com/news/164468.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • C#正则表达式与HashTable详解
    目录1、正则表达匹配规则转义字符限定字符分组()2、C#中正则表达式构建与匹配正则表达式的替换正则表达式拆分HashTable概述及元素添加Hashtable遍历Hashtable元...
    99+
    2022-11-13
  • C#正则表达式Regex用法详解
    目录一、正则表达式应用举例1、C#校验合法性:2、C#限制输入3、正则表达式匹配闭合HTML标签(支持嵌套)1、分组构造2、举例:二、.Net正则表达式测试器1、功能简介2、下载与安...
    99+
    2022-11-13
  • C++ 正则表达式的应用详解
    目录一、为什么要学正则表达式C++string处理:二、正则程序库(regex)正则文法:正则库:匹配(Match)搜索(Search)替换(Replace)一、为什么要学正则表达式...
    99+
    2022-11-12
  • C#字符串与正则表达式的图文详解
    1.创建字符串 string 变量名 = "字符串内容";            string str = "abcdrf";             Conso...
    99+
    2022-11-13
  • Python 正则表达式详解
    目录1.正则表达式是什么2.1用正则表达式2.2匹配原理2.3常用函数总结1.正则表达式是什么 很简单就是一种字符串匹配,eg: 比如你在注册账户时我们需要对用户的用户名判断是否合法...
    99+
    2022-11-12
  • JavaScript 正则表达式详解
    目录1. 正则表达式创建2. 使用模式2.1 使用简单模式2.2 使用特殊字符3. 应用3.1 切分字符串3.2 分组3.3 贪婪匹配3.4 正则表达式标志3.5 test() 方法...
    99+
    2022-11-12
  • Ruby正则表达式详解
    目录Ruby 正则表达式语法实例正则表达式修饰符正则表达式模式 正则表达式实例字符 字符类 特殊字符类 重复 非贪婪重复 ...
    99+
    2023-05-15
    Ruby 正则表达式 Ruby 正则表达式详解 Ruby 正则表达式实例
  • Java 正则表达式详解
    正则表达式(Regular Expression),又称为正规表达式、规则表达式、常规表示法等,是一种用来匹配、查找和替换字符串的工...
    99+
    2023-08-16
    Java
  • C++11正则表达式详解(regex_match、regex_search和regex_replace)
    目录字符规则regex_matchregex_searchregex_replace总结 在C++11中引入了正则表达式。 字符规则 先来了解一下这个字符的含义吧。 字符描...
    99+
    2022-11-13
  • jmeter正则表达式提取器的用法与正则详解
    我们再使用jmeter请求接口时,碰到一些业务流程性的接口改怎么办,比如,我一个发布内容的接口需要用到登录接口返回的token加到请求上去才能发布内容,那在jmeter上该是如何实现...
    99+
    2022-11-13
  • Python中正则表达式详解
    基础篇 正则表达式在python中运用的非常多,因为他可以进行任意的匹配,可以匹配我们想要提取的信息。当我们接触正则的时候你就会知道正则的强大。正则有一个库re 在一些工程中我们会经常调用正则的库来做与匹配...
    99+
    2022-06-04
    详解 正则表达式 Python
  • python正则表达式最详解
    目录一、正则表达式–元字符1.数量词2.字符匹配3.边界匹配4.组5.匹配模式参数二、方法re.findallre.matchgroup匹配对象re.searchre.compile...
    99+
    2022-11-12
  • Python3的正则表达式详解
    目录1.简介2.切分字符串3.分组4.贪婪匹配5.编译总结1.简介 # 正则表达式:用来匹配字符串的武器; # 设计思想:用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符...
    99+
    2022-11-13
  • 正则表达式用法详解
    正则表达式之基本概念 在我们写页面时,往往需要对表单的数据比如账号、身份证号等进行验证,而最有效的、用的最多的便是使用正则表达式来验证。那什么是正则表达式呢? 正则表达式(Regul...
    99+
    2022-11-12
  • Python中使用正则表达式及正则表达式匹配规则详解
    目录1 导库2 使用模板3 说明4 示例5 正则表达式匹配规则1 导库 import re 2 使用模板 re_pattern = re.compile(pattern, flags...
    99+
    2023-03-22
    Python正则表达式匹配规则 Python正则表达式
  • 正则表达式RegExp语法与用法详解
    目录正则表达式的定义和用途创建正则表达式方式一:使用构造函数创建方式二:使用字面量创建正则表达式的语法匹配字符简写模式修正符贪婪匹配断言正则表达式的使用搜索第一个符合条件的字符串 s...
    99+
    2022-11-13
  • C#正则表达式怎么理解
    这篇文章主要讲解了“C#正则表达式怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#正则表达式怎么理解”吧!到目前为止,许多的编程语言和工具都包含对正则表达式的支持,当然.NET也不...
    99+
    2023-06-17
  • C++中正则表达式的使用方法详解
    目录介绍1. C++ 中的正则表达式 (Regex)1.1 范围规范1.2 重复模式2. C++正则表达式的例子3. C++正则表达式中使用的函数模板3.1 regex_match(...
    99+
    2022-11-13
  • C#使用正则表达式
    一.正则基础 1. []方括号表示匹配可以匹配方括号中的任意点单个字符,方括号只允许匹配单个字符。2. | 或表示两项之间的一个选择,它不能和方括号使用,只能和小括号使用。3. ()...
    99+
    2022-11-13
  • C#正则表达式大全
    目录一、简介字符转义 字符类分组构造限定符二、C#常用正则表达式符号大全三、代码一、简介 正则表达式是一种匹配输入文本的模式,.Net 框架提供了允许这种匹配的正则表达式引...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作