亲宝软件园·资讯

展开

C# 正则表达式

Mwyldnje2003 人气:0

1、正则表达

Regular Expressiong,Regex、Regexp

常见语法:

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

正则表达式软件:RegEx Tester

匹配规则

元字符匹配:

正则表达式 

转义字符

如果想查找元字符本身,就必须采用\配合对应院子符来取消特定字符。
如果想查找\或.就采用\或.

限定字符

限定字符又叫重复描述字符,标识一个字符要出现的次数

分组()

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#中正则表达式构建与匹配

使用方法:

其构建方式有两种:

其中匹配选项提供一些特殊的帮助,是一个枚举值,包括下面六个值:

在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元素的删除

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

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

任务小结

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

编程思路:

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

加载全部内容

相关教程
猜你喜欢
用户评论