笔记9 正则表达式

正则表达式

正则表达式:使用单个字符串来描述,匹配一系列符合某个语法规则的字符串,通常会被用来检索与替换某些文本。

分类

愿意文本字符:正常的文本
元字符:具有一些特殊意义的字符,是用来代替正常文本的字符
限定符:限定匹配的数量
在这里插入图片描述
在这里插入图片描述

例题

要求字母开头,5-11位的字母数字下划线。
在这里插入图片描述

代码

添加名称空间(RegularExpressions)

 using System.Text.RegularExpressions;
//添加名称空间using System.Text.RegularExpressions; 下面的Regex才能用。

输入待匹配的内容,以及正则表达式

\d爆红的解决方式:
1、写两个斜杠——\d。 2、在字符串前面加@。@""——代表普通字符串 。(推荐)

            string input = "yun1111que222xue333tang44";
            //正则表达式:\d\d\d。此处在前面加@
            string pattern = @"\d\d\d";

判断input符不符合规则(最常用。适合账号密码)

因为添加了名称空间using System.Text.RegularExpressions;
所以,此处的Regex才能用。

    //创建一个新的正则,()里填正则表达式"",此处,引用上面的pattern即可
            Regex regex = new Regex(pattern);   
            
            //判断正则是否满足规则,它的返回值是布尔值
            bool res = regex.IsMatch(input);    //IsMatch是否匹配
            Console.WriteLine(res);
//结果:Ture

匹配,如果满足,打印出满足条件的第一个内容(适合在文章中)

            Match match = regex.Match(input);    
            //Match含义匹配结果,match就是匹配结果
           
            Console.WriteLine(match.Value); 
//结果:111。此处需要注意结果不是222,因为1111中的前三个数字符合正则表达式。

匹配所有满足条件的内容

            //MatchCollection是它自己的一个结果集合
            MatchCollection mc = regex.Matches(input);
            foreach (Match m in mc)
            {
                Console.WriteLine(m.Value);
            }
/*结果:111
       222
       333     */

贪婪模式(正则表达式的一个特性)

            string input = "<a><b>";
            
            string pattern = "<.*>";   //.*——匹配任意字符。
/*结果:即便是“匹配,打印出满足条件的第一个内容”,其结果也会是将所有符合的内容打印出来。
Ture
<a><b>
<a><b>    */

取消贪婪模式(?的第二个意思)

?的第二个意思:当?前面也是限制符时,表示取消贪婪模式

            string input = "<a><b>";
            
       //?的第二个意思:取消贪婪模式(当?前面也是限制符时)。即找离 < 最近的 > 。
            string pattern = "<.*?>";   //.*——匹配任意字符。
/*结果:Ture
       <a>
       <a>
       <b>     */ 

文件操作

添加名称空间(IO)

using System.IO; 

创建路径

              string path = @"E:\飞羽\Test06-17";    
             //path文件夹路径。要创建的文件夹名是“Test06-17” 

是否存在文件夹,不存在则创建

             /*是否存在文件夹。
             Directory(文件夹的类)这个类里有一个方法Exists(是否存在)。
             因为这个方法是直接用类名调用的,所以,它是个静态方法。
             然后我们把路径给它(path)。注意要加感叹号*/
            if (!Directory.Exists(path))
            {
                //不存在,就创建文件夹
                Directory.CreateDirectory(path);
            } 

文件路径拼接(两种方法)

            path += @"\1.txt";     //法一 
            path = Path.Combine(path, "2.txt"); //法二(推荐):自动检测是否添加\ 

第一种读写方式

如果文件不存在,创建文件

           //如果文件不存在,创建文件
            if (!File.Exists(path))
            {
                File.Create(path);
            }

写内容(WriteAllText)

            //写内容   
            File.WriteAllText(path, "飞羽老师今天也感冒了。");   
            //别忘了path是路径。会覆盖内容 

读内容(ReadAllText)

            //读内容
            Console.WriteLine(File.ReadAllText(path)); 

第二种读写方式(二进制。做日志)

字符串转二进制,二进制写到本地

/*FileStream文件流。给它路径、模式FileMode.创建、文件权限FileAccess.读或写或可读写(ReadWrite)。
             创建:1、Create覆盖:如果文件不存在就创建,存在就覆盖
                  2、Append追加(一般用于日志):在文件后追加字符串。
             此处,用的是覆盖,只写*/
            FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);
            //把字符串转成二进制(UTF8Encoding最常用的编码。GetBytes得到它的二进制)
            byte[] bs = new UTF8Encoding().GetBytes("今天圣诞节,叮叮当。");     
            //把这个二进制数组bs写进路径path里。一般从头开始写,写整个数组长度。
            fs.Write(bs, 0, bs.Length);
            //结束之后,一定要关掉流
            fs.Close();

创建一个空的数组,然后把二进制读出来放到数组里面。
之后,将二进制转成字符串。这个字符串就可以拿来用了。

               /*OpenOrCreate又能读,又能创建。
 比如,我要读2.txt,如果没有这个文件,Open就崩了,但OpenOrCreate可以创建。*/
            fs = new FileStream(path, FileMode.OpenOrCreate,FileAccess.Read);
            //创建空二进制数组(读了多长,让新建的数组有多长)
            byte[] bs2 = new byte[fs.Length];    
            //读出来放到新的二进制数组bs2里,从头开始读,读整个数组长度
            fs.Read(bs2, 0, bs2.Length);
            //转成字符串
            string s = new UTF8Encoding().GetString(bs2);
            //拿到字符串了,关流
            fs.Close();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章