笔记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();