筆記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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章