标签:lin 保存 操作 分组 电话 部分 手机号码 email地址 ons
项目中有些时候需要用到正则表达式,但是自己对正则表达式不熟悉,每次学习完,过一段时间(长时间)不用,就又忘了,每次需要用到的时候都需要百度下,比较麻烦,这里把C#中经常用到的正则表达式做下总结。
爬虫、网站数据验证、日志分析、字符串替换、获取子字符串、文本处理、字符串处理等
1. []方括号表示匹配可以匹配方括号中的任意点单个字符,方括号只允许匹配单个字符。
2. | 或表示两项之间的一个选择,它不能和方括号使用,只能和小括号使用。
3. ()小括号表示一个子表达式的开始和结束位置
4. ^ 否符号,如果用在方括号内,“^”表示不想要匹配的字符。
5. . 点字符:匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
6. 定位符:定位符使您能够将正则表达式固定到行首或行尾,^ 和 $ 分别指字符串的开始与结束
7. 限定符:限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配
8. 转义字符
9. 捕获组:除(Expression)和(?<name>Expression)语法外,其它的(?...)语法都不是捕获组。
var str = "Is is the cost of of gasoline going up up"; var patt1 = @"\b([a-z]+) \1\b"; var matchDatas1 = Regex.Matches(str, patt1).Select(x => x.Value); Console.WriteLine(JsonConvert.SerializeObject(matchDatas1));//["of of","up up"]
捕获组的顺序是从左到右,从1开始,0代表整体,这里的\1就是分组的第一个自匹配项,在Replace中可以用$1操作
string a = @"(020)76544567"; string b = @"\((\d{3})\)(\d{8})"; var c = new Regex(b); string d = c.Replace(a, "$0-$1-$2"); Console.WriteLine(d);//(020)76544567-020-76544567
10.选择
用圆括号将所有选择项括起来,相邻的选择项之间用|分割。用圆括号会有一个副作用,使相关的匹配会被缓存,缓存的数据会占用内存,降低匹配效率。此时可用?:放在第一个选项前来消除这种副作用。
可以使用非捕获元字符 ?:、?= 或 ?! 来重写捕获,忽略对相关匹配的保存。
1. 非空字符串,适用于匹配单词,关键字等 @"\S+"
2. html标签 @"<[^>]+>"
3. Email地址:@"\w+@(\w+\.)+\w{2,3}";
4. 域名:@"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?";
5. InternetURL:@"[a-zA-z]+://[^\s]*" 或 @"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$";
6. 手机号码:@"^([1][3,4,5,6,7,8,9])\d{9}$";
7. 国内电话号码:@"\d{3}-\d{8}|\d{4}-\d{7}";
8. 身份证:@"(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)";
9. 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 6-10 之间):@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{6,10}$";
10. 简单密码:@"\w{6,10}";
11. 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):@"^[a-zA-Z][a-zA-Z0-9_]{4,15}$";
12. 钱:@"^[0-9]+(.[0-9]+)?$";
13. QQ:@"[1-9][0-9]{4,}";
13. 邮政编码:@"[1-9]\d{5}(?!\d)";
14. IP:@"^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$";
15. 数字: @"^\d+$";
16. 字母:@"^[a-zA-Z]+$";
标签:lin 保存 操作 分组 电话 部分 手机号码 email地址 ons
原文地址:https://www.cnblogs.com/zhao123/p/11196486.html