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方法替换匹配正则表达式模式的文本。
posted @   hugowu  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示