详解C# 中的正则表达式运用

详解C#中的正则表达式运用

什么是正则表达式?

正则表达式(Regular Expression)是一种用来描述、匹配特定字符集合的字符串。一般用来做文本处理和字符串匹配,包括但不限于文本查找、替换、分割、提取等。

正则表达式的语法

具体的正则表达式语法非常复杂,这里只介绍C#的正则表达式语法常用的部分。

  • 文本匹配

  • 匹配单个字符:可以直接使用字符本身表示。例如,匹配字符'A'可以写作'A'。

  • 点“.”:表示匹配任何一个除了换行符外的字符。

  • 元字符:是指由特定字符组成的字符串,有特殊的含义。例如:'\d'表示匹配任意一个数字字符(0-9),'\s' 表示匹配任意一个空白符,'\w' 表示匹配任意一个字母或数字。需要注意的是,由于元字符可能与转义字符重复,所以需要使用双反斜杠('\\')来表示。

  • 重复匹配

  • 星号“”:表示前一个字符重复匹配零次或多次。例如:'abc' 匹配 "ac"、"abc"、"abbc"、"abbbc" 以及等等。

  • 加号“+”:表示前一个字符重复匹配一次或多次。例如:'ab+c' 匹配"abc"、"abbc"、"abbbc" 以及等等。

  • 问号“?”:表示前一个字符重复匹配零次或一次。例如:'ab?c' 匹配"ac"、"abc"。

  • 位置匹配

  • 插入符号“^”:表示匹配此符号后的字符位置是否在字符串的开头。

  • 美元符号“$”:表示匹配此符号前的字符位置是否在字符串的结尾。

  • 分组匹配

  • 用小括号“()”表示分组,其中可以再嵌套其他元字符。例如:“(\d{3})[ \-]?(\d{4})” 表示匹配3位数字后,如果后面有一个空格或横杠则忽略,再匹配四位数字。(这里的“?”表示可选)

C#中的正则表达式实现方式

.NET中提供了System.Text.RegularExpressions命名空间,用于提供正则表达式匹配支持。该命名空间提供Regex类,可以使用静态方法Match和MatchCollection对正则表达式进行搜索和匹配。

下面是一个使用C#正则表达式匹配电话号码的示例代码:

using System.Text.RegularExpressions;

...

string input = "我的电话号码是010-12345678。";
string pattern = "(\\d{3})[ \\-]?(\\d{4})";
Match match = Regex.Match(input, pattern);
if (match.Success)
{
    Console.WriteLine("匹配结果是:{0}", match.Value);
}

以上代码会将输入字符串中符合电话号码格式的部分匹配出来并输出。其中,正则表达式中的" (\d{3})"表示匹配任意三个数字,"[ \-]?"表示忽略任一空格或横杠(可选)," (\d{4})"表示匹配任意四个数字。

正则表达式的应用

正则表达式在软件开发中应用广泛,常见的应用场景包括但不限于:

  1. 表单输入合法性校验。例如,对邮箱、电话号码、身份证号码等输入进行优化和控制。

  2. 字符串筛选和检索。例如,通过正则表达式将网页中的电子邮件地址提取出来。

下面是两条更为具体的示例:

示例一:用户名输入校验

实现对用户名形式的校验,只允许输入字母和数字,长度在6-16个字符之间,首字符为字母。


分解该校验需求:

  • 用户名只允许输入字母和数字
^[a-zA-z0-9]+$
  • 长度在6-16个字符之间
^.{6,16}$
  • 首字符为字母
^[a-zA-z]+.*

整体的正则表达式:

^[a-zA-z]+[a-zA-z0-9]{5,15}$

示例二:截取Url中的参数

实现从Url中截取参数并分析其值。


例如:对于url "http://www.example.com/search.php?q=keyword&limit=10",我们需要截取出其参数q和limit的值。

实现正则表达式:

(?<=\\?|\\&)(?<name>[^=]+)=(?<value>[^&]+)

上面的正则表达式使用了正则表达式的零宽断言,用来匹配问号或者&符号后面的变量名name和变量值value。

string url = "http://www.example.com/search.php?q=keyword&limit=10";
string pattern = "(?<=\\?|\\&)(?<name>[^=]+)=(?<value>[^&]+)";
MatchCollection matches = Regex.Matches(url, pattern);
foreach (Match match in matches)
{
    Console.WriteLine("{0} = {1}", match.Groups["name"], match.Groups["value"]);
}

这段代码可以输出:

q = keyword
limit = 10

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C# 中的正则表达式运用 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • asp.net+js实时奥运金牌榜代码第1/2页

    asp.net+js实时奥运金牌榜是一项基于ASP.NET和JavaScript技术的开发项目,可以实时监控奥运会金牌榜的变化并显示在网页上,该项目具有较高的实用性,适用于体育比赛等大型赛事开发。以下是该项目的详细攻略: 环境搭建 安装Visual Studio 安装IIS服务器 创建Web应用项目 技术实现 HTML HTML部分主要用于页面结构的搭建,使…

    C# 2023年5月31日
    00
  • npoi2.0将datatable对象转换为excel2007示例

    针对将DataTable对象转换为Excel2007的问题,可以使用NPOI来实现。步骤分为以下几个:首先创建一个Workbook对象;接着创建一个Sheet对象,指定Sheet名称;然后创建表头header;接着将header插入到Excel表格的第一行中;最后将DataTable中的数据逐行写入Excel表格中。 下面给出两个具体的示例说明: 示例一 u…

    C# 2023年6月8日
    00
  • C#自写的一个HTML解析类(类似XElement语法)

    我会为你详细讲解“C#自写的一个HTML解析类(类似XElement语法)”的完整攻略。 什么是HTML解析类? HTML解析类是一种可以解析HTML文档并提取其中内容的工具。它可以识别HTML标记,提取其中的文本和属性,并将它们封装成一个对象,以便于使用和管理。 使用C#自写的HTML解析类 C#自写的HTML解析类使用起来非常简单,其代码如下: usin…

    C# 2023年6月1日
    00
  • Entity Framework映射TPH、TPT、TPC与继承类

    Entity Framework是一种ORM(Object-Relational Mapping)技术,可以将对象映射到数据库中的关系表。在Entity Framework中,支持三种继承映射策略:TPH(Table Per Hierarchy)、TPT(Table Per Type)和TPC(Table Per Concrete class)。 TPH(T…

    C# 2023年5月31日
    00
  • DropDownList获取的SelectIndex一直为0的问题

    该问题一般出现在在使用ASP.NET开发Web应用程序时,使用DropDownList控件绑定数据源后无法正确获取所选项索引(SelectIndex)的情况。解决该问题的方法如下: 1.数据源绑定前确保AutoPostBack属性为True 有时候,当DropDownList控件的AutoPostBack属性设置为False时,可能会导致绑定数据源后Sele…

    C# 2023年5月31日
    00
  • 简述C#枚举高级战术

    下面是详细讲解“简述C#枚举高级战术”的完整攻略。 什么是枚举 枚举是一种特殊的数据类型,它表示一组有限的值,这组值被称为枚举成员。在C#中,我们使用enum关键字来定义枚举类型。下面是定义一个枚举类型的示例: enum Color { Red, Green, Blue } 这里我们定义了一个名为Color的枚举类型,它包含了三个枚举成员:Red、Green…

    C# 2023年5月14日
    00
  • 经典实例讲解C#递归算法

    经典实例讲解C#递归算法攻略 什么是递归算法 递归算法通过自身不断的调用自身来实现计算。它是一种比较常用的算法,可以用来解决很多复杂问题。 递归算法的特点 递归算法有以下几个特点: 递归调用必须有结束条件 函数调用自身 函数每次调用的参数不同 C#递归算法的示例 示例1:阶乘运算 阶乘是指一个数的阶乘是所有比它小的正整数的积。例如,5的阶乘为54321=12…

    C# 2023年6月6日
    00
  • 基于.net的分布式系统限流组件示例详解

    让我们来详细讲解一下关于“基于.net的分布式系统限流组件示例详解”的完整攻略。 1. 什么是分布式系统限流? 在一个分布式系统中,由于不同的模块可能会同时发起大量请求,对于一个稳定的服务而言,需要对这些请求进行限制,以避免系统过载导致的服务不可用或响应变慢情况。这个过程就被称为分布式系统限流。 2. 基于.net的分布式系统限流组件 本篇攻略介绍的是基于.…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部