C# 使用正则表达式
在C#中,可以使用正则表达式来处理文本字符串。正则表达式是一种特殊的文本模式,用于匹配和搜索字符串。它可以识别特定模式,如邮箱地址、电话号码、网址等。正则表达式是C#中常用的一种文本处理技术,使用它可以帮助开发人员更轻松地查找和操作特定模式的子字符串。Regex类提供了广泛的方法和属性,可以完成各种正则表达式操作。
校验数字的表达式: 常用的针对数字的匹配符号。
Regex(@"^[0-9]*$"); // 匹配0-9数字
Regex(@"^\d{n}$"); // 匹配出现过n次的数字
Regex(@"^\d{n,}$"); // 匹配至少出现过n次的数字
Regex(@"^\d{m,n}$"); // 匹配最小出现过m次最大n次的数字
Regex(@"^(0|[1-9][0-9]*)$"); // 匹配零和非零开头的数字
Regex(@"^([1-9][0-9]*)+(.[0-9]{1,2})?$"); // 匹配非零开头的最多带两位小数的数字
Regex(@"^(\-)?\d+(\.\d{1,2})?$"); // 匹配带1-2位小数的正数或负数
Regex(@"^(\-|\+)?\d+(\.\d+)?$"); // 匹配正数、负数、和小数
Regex(@"^[0-9]+(.[0-9]{2})?$"); // 匹配有两位小数的正实数
Regex(@"^[0-9]+(.[0-9]{1,3})?$"); // 匹配有1~3位小数的正实数
Regex(@"^[1-9]\d*$"); // 匹配非零的正整数
Regex(@"^([1-9][0-9]*){1,3}$"); // 同上
Regex(@"^\+?[1-9][0-9]*$"); // 同上
Regex(@"^\-[1-9][]0-9"*$); // 匹配非零负整数
Regex(@"^-[1-9]\d*$");
Regex(@"^\d+$"); // 匹配非负整数
Regex(@"^[1-9]\d*|0$");
Regex(@"^-[1-9]\d*|0$"); // 匹配非正整数
Regex(@"^((-\d+)|(0+))$");
Regex(@"^(-?\d+)(\.\d+)?$"); // 匹配浮点数
Regex(@"^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$");
Regex(@"^\d+(\.\d+)?$"); // 匹配非负浮点数
Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$");
Regex(@"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"); // 匹配非正浮点数
Regex(@"^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$");
Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$") // 匹配正浮点数
Regex(@"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$");
Regex(@"^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$"); // 匹配负浮点数
Regex(@"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$");
校验字符的表达式
Regex(@"^[\u4e00-\u9fa5]{0,}$"); // 匹配汉字
Regex(@"^[A-Za-z0-9]+$"); // 匹配英文和数字
Regex(@"^[A-Za-z0-9]{4,40}$"); // 匹配应为和数字,最小4位最大40位
Regex(@"^.{3,20}$"); // 匹配长度为3-20的所有字符
Regex(@"^[A-Za-z]+$"); // 匹配由26个英文字母组成的字符串
Regex(@"^[A-Z]+$"); // 匹配由26个大写英文字母组成的字符串
Regex(@"^[a-z]+$"); // 匹配由26个小写英文字母组成的字符串
Regex(@"^[A-Za-z0-9]+$"); // 匹配由数字和26个英文字母组成的字符串
Regex(@"^\w+$ 或 ^\w{3,20}$"); // 匹配由数字、26个英文字母或者下划线组成的字符串
Regex(@"^[\u4E00-\u9FA5A-Za-z0-9_]+$"); // 匹配中文、英文、数字包括下划线
Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]+$"); // 匹配中文、英文、数字但不包括下划线等符号
Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$"); // 同上,不过这里可以限制长度
Regex(@"[^%&’,;=?$\x22]+"); // 可以输入含有^%&’,;=?$\"等字符
Regex(@"[^~\x22]+"); // 禁止输入含有~的字符
特殊需求表达式
Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"); // 验证email地址
Regex(@"[a-zA-z]+://[^\s]*"); // 验证URL网址
Regex(@"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$");
Regex(@"^([a-zA-Z]+://)?([\w-\.]+)(\.[a-zA-Z0-9]+)(:\d{0,5})?/?([\w-/]*)\.?([a-zA-Z]*)\??(([\w-]*=[\w%]*&?)*)$");
Regex(@"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$"); // 验证手机号码
Regex(@"^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$"); // 验证电话号码
Regex(@"\d{3}-\d{8}|\d{4}-\d{7}"); // 验证国内电话号码
Regex(@"^\d{15}|\d{18}$"); // 身份证号(15位、18位数字)
Regex(@"^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$"); // 短身份证号码(数字、字母x结尾)
//帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
Regex(@"^[a-zA-Z][a-zA-Z0-9_]{4,15}$");
//密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)
Regex(@"^[a-zA-Z]\w{5,17}$");
//强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)
Regex(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$");
//日期格式
Regex(@"^\d{4}-\d{1,2}-\d{1,2}");
//一年的12个月(01~09和1~12)
Regex(@"^(0?[1-9]|1[0-2])$");
//一个月的31天(01~09和1~31)
Regex(@"^((0?[1-9])|((1|2)[0-9])|30|31)$");
//钱的输入格式:
//有四种钱的表示形式我们可以接受:”10000.00″ 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”
Regex(@"^[1-9][0-9]*$");
//这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0″不通过,所以我们采用下面的形式
Regex(@"^(0|[1-9][0-9]*)$");
//一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号
Regex(@"^(0|-?[1-9][0-9]*)$");
//这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分
Regex(@"^[0-9]+(.[0-9]+)?$");
//必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10” 和 “10.2” 是通过的
Regex(@"^[0-9]+(.[0-9]{2})?$");
//这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样
Regex(@"^[0-9]+(.[0-9]{1,2})?$");
//这样就允许用户只写一位小数。下面我们该考虑数字中的逗号了,我们可以这样
Regex(@"^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$");
//1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须
Regex(@"^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$");
//xml文件
Regex(@"^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$");
//中文字符的正则表达式
Regex(@"[\u4e00-\u9fa5]");
//双字节字符
Regex(@"[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))");
//空白行的正则表达式,可用来删除空白行
Regex(@"\n\s*\r");
//HTML标记的正则表达式
Regex(@"<(\S*?)[^>]*>.*?</\1>|<.*? />");// (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
//首尾空白字符的正则表达式
Regex(@"^\s*|\s*$或(^\s*)|(\s*$)");// (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
//腾讯QQ号
Regex(@"[1-9][0-9]{4,}"); //(腾讯QQ号从10000开始)
//中国邮政编码
Regex(@"[1-9]\d{5}(?!\d)");// (中国邮政编码为6位数字)
//IP地址
Regex(@"\d+\.\d+\.\d+\.\d+");// (提取IP地址时有用)
Regex(@"((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))");
使用正则匹配: C#中字符串常量以@开头,这样优点是转义序列不被处理,按“原样”输出
matches = 在指定的输入字符串中搜索正则表达式的所有匹配项。
match = 在指定的输入字符串中搜索 Regex 构造函数中指定的正则表达式的第一个匹配项。
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 正则匹配的基本使用1
string str = "Address=192.168.1.1;Name=lyshark;Host=9999";
Regex reg = new Regex("Name=(.+);"); // 设置匹配条件
Match match = reg.Match(str); // 匹配
string value = match.Groups[0].Value; // 获取到匹配结果
Console.WriteLine("匹配到数据: " + value);
// 正则匹配的基本使用2
string input = "1986 1997 2005 2009 2019 1951 1999 1950 1905 2003";
string pattern = @"(?<=19)\d{2}\b";
foreach(Match each in Regex.Matches(input,pattern))
{
Console.WriteLine("匹配到时间: " + each.Value);
}
Console.ReadKey();
}
}
}
正则替换字符: replace 在指定的输入字符串内,使用指定的替换字符串替换与某个正则表达式模式匹配的所有字符串。
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 正则替换掉指定单词
string line = "Address=192.168.1.10; Name=lyshark;";
Regex reg_line = new Regex("Name=(.+);");
string modified = reg_line.Replace(line, "Name=admin;");
Console.WriteLine("修改后的结果: " + modified);
// 正则替换掉多余空格
string input = "Hello World ";
string pattern = "\\s+";
string replacement = " ";
Regex reg = new Regex(pattern);
string result = reg.Replace(input, replacement);
Console.WriteLine("替换前:{0} 替换后:{1}", input, result);
Console.ReadKey();
}
}
}
判断字符串状态: IsMatch 指示 Regex 构造函数中指定的正则表达式在指定的输入字符串中是否找到了匹配项。
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string RegexStr = string.Empty;
// 匹配字符串的开始和结束是否为0-9的数字[定位字符]
RegexStr = "^[0-9]+$";
Console.WriteLine("判断是否为数字: {0}", Regex.IsMatch("1234", RegexStr));
// 匹配字符串中间是否包含数字(任意位子只要有一个数字即可)
RegexStr = @"\d+";
Console.WriteLine("判断是否包含数字: {0}", Regex.IsMatch("你好123", RegexStr));
// 匹配字符串开头结尾,忽略大小写
RegexStr = @"Hello[\w\W]*";
Console.WriteLine("匹配是否以Hello开头: {0}", Regex.IsMatch("Hello Lyshark", RegexStr, RegexOptions.IgnoreCase));
RegexStr = @"[\w\W*]Hello";
Console.WriteLine("匹配是否已Hello结尾: {0}", Regex.IsMatch("Hello Lyshark", RegexStr, RegexOptions.IgnoreCase));
Console.ReadKey();
}
}
}
正则分组匹配:
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string RegexStr = string.Empty;
// 匹配所行记录数
string TaobaoLink = "<a href=\"http://www.taobao.com\" title=\"淘宝网\" target=\"_blank\">淘宝</a>";
RegexStr = @"<a[^>]+href=""(\S+)""[^>]+title=""([\s\S]+?)""[^>]+>(\S+)</a>";
Match mat = Regex.Match(TaobaoLink, RegexStr);
for (int i = 0; i < mat.Groups.Count; i++)
{
Console.WriteLine(mat.Groups[i].Value);
}
// 分组匹配
string Resume = "姓名:lyshark|性别:男|出生日期:1991-12-12|手机:18264855695";
RegexStr = @"姓名:(?<name>[\S]+)\|性别:(?<sex>[\S]{1})\|出生日期:(?<Birth>[\S]{10})\|手机:(?<phone>[\d]{11})";
Match match = Regex.Match(Resume, RegexStr);
Console.WriteLine("姓名:{0} 手机号: {1}", match.Groups["name"].ToString(),match.Groups["phone"].ToString());
Console.ReadKey();
}
}
}
正则拆分字符串:
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string SplitInputStr = "1xxxxx.2ooooo.3eeee.4kkkkkk.";
string RegexStr = string.Empty;
RegexStr = @"(\d)";
Regex split_exp = new Regex(RegexStr);
string[] str = split_exp.Split(SplitInputStr);
foreach (string each in str)
Console.WriteLine(each);
Console.ReadKey();
}
}
}
解析HTML标签:
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 获得href中的值
string RegexStr = string.Empty;
string LinkA = "<a href=\"http://www.baidu.com\" target=\"_blank\">百度</a>";
RegexStr = @"href=""[\S]+""";
Match match = Regex.Match(LinkA, RegexStr);
Console.WriteLine("获得href中的值: {0}", match.Value);
// 匹配标签
string LinkB = "<h1>hellolyshark</h1>";
RegexStr = @"<h[^23456]>[\S]+</h[1]>";
Console.WriteLine("h1值: {0}", Regex.Match(LinkB, RegexStr, RegexOptions.IgnoreCase).Value);
RegexStr = @"ab\w+|ij\w{1,}"; //匹配ab和字母 或 ij和字母
Console.WriteLine("{0}。多选结构:{1}", "abcd", Regex.Match("abcd", RegexStr).Value);
Console.WriteLine("{0}。多选结构:{1}", "efgh", Regex.Match("efgh", RegexStr).Value);
Console.WriteLine("{0}。多选结构:{1}", "ijk", Regex.Match("ijk", RegexStr).Value);
RegexStr = @"张三?丰"; //?匹配前面的子表达式零次或一次。
Console.WriteLine("{0}。可选项元素:{1}", "张三丰", Regex.Match("张三丰", RegexStr).Value);
Console.WriteLine("{0}。可选项元素:{1}", "张丰", Regex.Match("张丰", RegexStr).Value);
Console.WriteLine("{0}。可选项元素:{1}", "张飞", Regex.Match("张飞", RegexStr).Value);
//匹配特殊字符
RegexStr = @"Asp\.net"; //匹配Asp.net字符,因为.是元字符他会匹配除换行符以外的任意字符。
Console.WriteLine("{0}。匹配Asp.net字符:{1}", "Java Asp.net SQLServer", Regex.Match("Java Asp.net", RegexStr).Value);
Console.WriteLine("{0}。匹配Asp.net字符:{1}", "C# Java", Regex.Match("C# Java", RegexStr).Value);
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string PageInfo = @"<hteml>
<div id=""div1"">
<a href=""http://www.baidu.con"" target=""_blank"">百度</a>
<a href=""http://www.taobao.con"" target=""_blank"">淘宝</a>
<a href=""http://www.cnblogs.com"" target=""_blank"">博客园</a>
<a href=""http://www.google.con"" target=""_blank"">google</a>
</div>
<div id=""div2"">
<a href=""/zufang/"">整租</a>
<a href=""/hezu/"">合租</a>
<a href=""/qiuzu/"">求租</a>
<a href=""/ershoufang/"">二手房</a>
<a href=""/shangpucz/"">商铺出租</a>
</div>
</hteml>";
string RegexStr = string.Empty;
RegexStr = @"<a[^>]+href=""(?<href>[\S]+?)""[^>]*>(?<text>[\S]+?)</a>";
MatchCollection mc = Regex.Matches(PageInfo, RegexStr);
foreach (Match item in mc)
{
Console.WriteLine("href:{0}--->text:{1}", item.Groups["href"].ToString(), item.Groups["text"].ToString());
}
Console.ReadKey();
}
}
}
C# 使用正则表达式的更多相关文章
- JS正则表达式常用总结
正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...
- Python高手之路【五】python基础之正则表达式
下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...
- C# 正则表达式大全
文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...
- C#基础篇 - 正则表达式入门
1.基本概念 正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符.及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串 ...
- JavaScript正则表达式,你真的知道?
一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- 【JS基础】正则表达式
正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...
- JavaScript 正则表达式语法
定义 JavaScript定义正则表达式有两种方法. 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); ...
- [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)
数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...
- JS中给正则表达式加变量
前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下. 一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...
随机推荐
- 【docker】运维相关名词 Iaas-Paas和Saas docker镜像设置 启动与停止常用命令 镜像相关命令 容器相关命令
目录 上节回顾 今日内容 1 什么是Iaas-Paas和Saas 2 docker 启动设置镜像 2.1 启动与停止常用命令 3 镜像相关命令 4 容器相关命令 练习 上节回顾 # 1 flask-s ...
- maven 强制使用本地仓库
pom 文件添加如下内容: <repositories> <repository> <id>alimaven</id> <name>aliy ...
- kill 进程时遇到的一件有意思的事情
案例现象 一般来讲,我们在 kill 掉一个进程的时候通常有两个选择: 找到进程的 pid 号,然后执行 kill 命令 找到进程的名字,然后执行 pkill 命令 pkill 和 kill 命令都是 ...
- SAE 2.0,让容器化应用开发更简单
云原生容器化应用托管模式的演变 云原生这个概念从提出,到壮大,再到今天的极大普及,始终处于一个不断演进和革新的过程中.云原生体系下应用的托管形态是随着企业应用架构在不断演进的.最早的应用大多是集中式. ...
- vue tabBar导航栏设计实现1-初步设计
系列导航 一.vue tabBar导航栏设计实现1-初步设计 二.vue tabBar导航栏设计实现2-抽取tab-bar 三.vue tabBar导航栏设计实现3-进一步抽取tab-item 四.v ...
- vue 基于axios封装request接口请求——request.js文件
https://blog.csdn.net/m0_67393593/article/details/123266577?utm_medium=distribute.pc_relevant.none-t ...
- 一文看完String的前世今生,内容有点多,请耐心看完!
写在开头 String字符串作为一种引用类型,在Java中的地位举足轻重,也是代码中出现频率最高的一种数据结构,因此,我们需要像分析Object一样,将String作为一个topic,单独拿出来总结, ...
- 面向对象C++学习总结
洛谷日记3 2023.5 面向对象C++ : 运算符重载 1.运算符重载 (1)n定义重载运算符和定义普通函数类似,只是该函数的名字是operator@,@表示要重载的运算符. MinInt oper ...
- WPF|分享一个登录界面设计
分享一个登录界面,先看效果图: 准备 文中使用到了一些图标: 我们可以从 iconfont免费下载: 代码简单说明 请随手创建一个WPF项目(.NET Framework..NET 5\6\7皆可), ...
- Linux-分区-fdisk-mkfs-mount