首页 > 编程语言 >c# regex正则表达式

c# regex正则表达式

时间:2023-02-25 21:35:35浏览次数:43  
标签:regex 字符 匹配 c# Regex 正则表达式 字符串 文本

目录

C# 正则表达式Regex

正则表达式提供了功能强大、灵活而又高效的方法来处理文本。 正则表达式丰富的泛模式匹配表示法使你可以快速分析大量文本,以便:

  • 查找特定字符模式。
  • 验证文本以确保它匹配预定义模式(如电子邮件地址)。
  • 提取、编辑、替换或删除文本子字符串。
  • 将提取的字符串添加到集合中,以便生成报告。

对于处理字符串或分析大文本块的许多应用程序而言,正则表达式是不可缺少的工具。

来自微软官方

1. c#的正则表达式基本构成

使用正则表达式处理文本的中心构件是正则表达式引擎,处理文本至少要求向该正则表达式引擎提供以下两方面的信息:

  • 要在文本中标识的正则表达式模式
  • 要为正则表达式模式分析的文本
using System.Text.RegularExpressions;

Regex reg = new Regex(@"\d+");
Match match = reg.Match("a55a");
if (match.Success)
{
    Console.WriteLine(match.Value);
}

上面的示例给出了一个基本的正则表达式查找流程。

2. 正则表达式模式

2.1 正则表达式中的定位点

^ 表示匹配出现在字符串开头

$ 表示匹配出现在字符串末尾,或出现在输入字符串末尾的 \n 之前

\b表示匹配在字符边界

\z 匹配仅出现在字符串的末尾,多行字符串仅仅匹配最后一行,不匹配字符串末尾的\n

\Z匹配必须出现在字符串的末尾,或出现在字符串末尾的 \n 之前

\A匹配必须仅出现在字符串的开头位置(无多行支持)

\G匹配必须从上一个匹配结束的位置开始;如果以前没有匹配项,则从开始进行匹配的字符串中的位置开始。

2.2 字符类

字符类表示的是一类字符,匹配的时候只要和字符类中的任意一个匹配就是满足条件

字符类 描述 模式 匹配
[character_group] 匹配 character_group 中的任何单个字符。 默认情况下,匹配区分大小写。 [ae] "gray" 中的 "a" "lane" 中的 "a""e"
[^character_group] 求反:与不在 character_group 中的任何单个字符匹配。 默认情况下, character_group 中的字符区分大小写。 [^aei] "reign" 中的 "r""g""n"
[first-last] 字符范围:与从第一个至最后一个的范围内的任何单个字符匹配。 [A-Z] "AB123" 中的 "A""B"
. 通配符:与\n 之外的任何单个字符匹配。 若要匹配文本句点字符(. 或 \u002E),你必须在该字符前面加上转义符 (\.)。 a.e "nave" 中的 "ave" "water" 中的 "ate"
\p{name} name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 \p{Lu} \p{IsCyrillic} "City Lights" 中的 "C""L" "ДЖem" 中的 "Д""Ж"
\P{name} 不在 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 \P{Lu} \P{IsCyrillic} "City" 中的 "i""t""y" "ДЖem" 中的 "e""m"
\w 与任何单词字符匹配。 \w "ID A1.3" 中的 "I""D""A""1""3"
\W 与任何非单词字符匹配。 \W "ID A1.3" 中的 " ""."
\s 与任何空白字符匹配。 \w\s "ID A1.3" 中的 "D "
\S 与任何非空白字符匹配。 \s\S "int __ctr" 中的 " _"
\d 与任何十进制数字匹配。 \d "4 = IV" 中的 "4"
\D 与任何不是十进制数的字符匹配。 \D "4 = IV" 中的 " ""="" ""I""V"

2.3 分组

分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。

分组构造 描述 模式 匹配
(subexpression) 捕获匹配的子表达式并将其分配到一个从 1 开始的序号中。 (\w)\1 "deep" 中的 "ee"
(?<name>subexpression)(?'name'subexpression) 将匹配的子表达式捕获到一个命名组中。 (?<double>\w)\k<double> "deep" 中的 "ee"

2.4 数量词

限定符 描述 模式 匹配
* 匹配上一个元素零次或多次。 a.*c "abcbc" 中的 "abcbc"
+ 匹配上一个元素一次或多次。 "be+" "been" 中的 "bee""bent" 中的 "be"
? 匹配上一个元素零次或一次。 "rai?" "rain" 中的 "rai"
{n} 匹配上一个元素恰好 n 次。 ",\d{3}" "1,043.6" 中的 ",043""9,876,543,210" 中的 ",876"",543"",210"
{n,} 匹配上一个元素至少 n 次。 "\d{2,}" "166", "29", "1930"
{n,m} 匹配上一个元素至少 n 次,但不多于 m 次。 "\d{3,5}" "166", "17668" "193024" 中的 "19302"
*? 匹配上一个元素零次或多次,但次数尽可能少。 a.*?c "abcbc" 中的 "abc"
+? 匹配上一个元素一次或多次,但次数尽可能少。 "be+?" "been" 中的 "be""bent" 中的 "be"
?? 匹配上一个元素零次或一次,但次数尽可能少。 "rai??" "rain" 中的 "ra"
{n}? 匹配前面的元素恰好 n 次。 ",\d{3}?" "1,043.6" 中的 ",043""9,876,543,210" 中的 ",876"",543"",210"

3. 正则表达式的执行方法

  • 通过调用 Regex.IsMatch方法确定输入文本中是否具有正则表达式模式。
  • 通过调用 Regex.MatchRegex.Matches方法检索匹配正则表达式模式的一个或所有文本匹配项。
  • 通过调用 Regex.Replace方法替换匹配正则表达式模式的文本。

标签:regex,字符,匹配,c#,Regex,正则表达式,字符串,文本
From: https://www.cnblogs.com/hugowu-blog/p/17155440.html

相关文章

  • Namespace & Cgroup
    DockerNamespaceVsCgroup最近想学习一下Docker底层是用什么技术来实现容器之间互不影响这一强大功能的,偶尔发现了这篇文章,里面对Docker底层的实现技术做了比较宏观的解......
  • 本地缓存无冕之王Caffeine Cache
    本文已收录至Github,推荐阅读......
  • #yyds干货盘点# LeetCode面试题:移除元素
    1.简述:给你一个数组nums 和一个值val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地......
  • #yyds干货盘点# LeetCode面试题:找出字符串中第一个匹配项的下标
    1.简述:给你两个字符串 haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果 needle不是haystack的一部分,则返回......
  • #yyds干货盘点# LeetCode程序员面试金典:整数的英语表示
    题目:给定一个整数,打印该整数的英文描述。示例1:输入:123输出:"OneHundredTwentyThree"示例2:输入:12345输出:"TwelveThousandThreeHundredFortyFive"示例3:......
  • #yyds干货盘点# LeetCode程序员面试金典:运算
    题目:请实现整数数字的乘法、减法和除法运算,运算结果均为整数数字,程序中只允许使用加法运算符和逻辑运算符,允许程序中出现正负常数,不允许使用位运算。你的实现应该支持如下操......
  • 基本排序算法的C语言实现
    为了复习DS临时起意,大概率会咕咕咕...目录插入排序快速排序归并排序堆排序插入排序voidinsertion_sort(intp[],intn){for(inti=2;i<=n;i++){......
  • Rock, Paper, Scissors VJ-HZNU-Feb1
    题目意思:两人石头剪刀布,总数n,第二行给出a的石头,剪刀,布的次数,第三行给出b的石头,剪刀,布的次数,返回a最少能赢和最多能赢的次数思路:最多:每次取a克制b的选择,之和两数中的最小数......
  • Slope Trick
    原理若一个函数满足:连续分段线性凸性则可以使用SlopeTrick来快速维护。我们发现我们可以仅通过记录转折点,转折点处斜率变化,以及一侧的直线即可维护出整个函数。......
  • 【LeetCode二叉树#06】获取二叉树的所有路径(分析递归中的回溯机制)
    二叉树所有路径力扣题目链接(opensnewwindow)给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。示例:思路根据题意,每次遍......