筆記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();