C#正則表達式的詳細使用說明(附示例代碼)
更新時間:2025年07月21日 08:57:25 作者:生命不息-學無止境
正則表達式是一種匹配輸入文本的模式,Net框架提供了允許這種匹配的正則表達式引擎,模式由一個或多個字符、運算符和結(jié)構(gòu)組成,這篇文章主要介紹了C#正則表達式的詳細使用說明,需要的朋友可以參考下
正則表達式基礎(chǔ)概念
- 正則表達式是一種用于匹配文本模式的工具。它是由普通字符(例如字母、數(shù)字)和特殊字符(稱為元字符)組成的字符串模式。在C#中,主要通過
System.Text.RegularExpressions命名空間來使用正則表達式。 - 元字符表格顯示:
| 分類 | 正則表達式字符 | 描述 | 示例 |
|---|---|---|---|
| 字符類 | . | 匹配除換行符之外的任意單個字符 | a.b可匹配aab、acb等 |
[abc] | 匹配字符a、b或c中的任意一個 | [abc]可匹配a、b、c中的任意一個字符,如ab[abc]d可匹配abbd、abcd等 | |
[0-9] | 匹配任意一個數(shù)字字符,等同于\d | [0-9]可匹配0-9中的任意一個數(shù)字,如a1b中的1 | |
[a-z] | 匹配任意一個小寫字母字符 | [a-z]可匹配a-z中的任意一個小寫字母,如a[abcdef]b可匹配abc、abd等 | |
[^abc] | 匹配除a、b、c之外的任意一個字符 | [^abc]可匹配除a、b、c之外的任意字符,如a1b中的1,a#b中的# | |
| 量詞 | * | 匹配前面的元素零次或多次 | ab*可匹配a、ab、abb等 |
+ | 匹配前面的元素一次或多次 | ab+可匹配ab、abb等,但不能匹配a | |
? | 匹配前面的元素零次或一次 | ab?可匹配a或ab | |
{n} | 匹配前面的元素恰好n次 | a{3}可匹配aaa | |
{n,} | 匹配前面的元素至少n次 | a{2,}可匹配aa、aaa等 | |
{n,m} | 匹配前面的元素至少n次且不超過m次 | a{2,4}可匹配aa、aaa、aaaa | |
| 特殊字符 | \d | 匹配任意一個數(shù)字字符,等同于[0-9] | \d可匹配0-9中的任意一個數(shù)字,如a1b中的1 |
\D | 匹配任意一個非數(shù)字字符,等同于[^0-9] | \D可匹配除數(shù)字以外的任意字符,如a#b中的a、#、b | |
\w | 匹配任意一個字母、數(shù)字或下劃線字符,等同于[a-zA-Z0-9_] | \w可匹配a-z、A-Z、0-9、_中的任意一個字符,如a1_b中的a、1、_ | |
\W | 匹配任意一個非字母、數(shù)字或下劃線字符,等同于[^a-zA-Z0-9_] | \W可匹配除字母、數(shù)字、下劃線以外的任意字符,如a#b中的# | |
\s | 匹配任意一個空白字符,包括空格、制表符、換頁符等 | a\sb可匹配a b,其中中間有一個空格 | |
\S | 匹配任意一個非空白字符 | a\Sb可匹配a#b等,其中#是非空白字符 | |
\b | 匹配一個單詞邊界 | \bcat\b可匹配單獨的單詞cat,但不能匹配category中的cat | |
\B | 匹配一個非單詞邊界 | \Bcat\B可匹配category中的cat,但不能匹配單獨的單詞cat | |
| 定位符 | ^ | 匹配輸入字符串的開始位置 | ^abc可匹配以abc開頭的字符串,如abcdef |
$ | 匹配輸入字符串的結(jié)束位置 | def$可匹配以def結(jié)尾的字符串,如abcdef | |
| 轉(zhuǎn)義字符 | \ | 轉(zhuǎn)義特殊字符,使特殊字符按字面意思匹配 | \.可匹配真正的句點字符.,而不是表示任意字符的. |
| 分組與捕獲 | (...) | 字符類,匹配括號內(nèi)的任意一個字符,并將括號內(nèi)的內(nèi)容作為一個分組,可以通過Match.Groups獲取分組內(nèi)容 | (abc)可匹配a、b或c中的任意一個字符,如a(abc)d可匹配aabd、aacd等,通過分組可獲取匹配到的具體字符 |
| 零寬斷言 | (?=...) | 正向肯定預查,用于查找后面跟著特定模式的位置,但不消耗字符 | \d(?=abc)可匹配后面跟著abc的數(shù)字,如1abc中的1 |
(?!...) | 正向否定預查,用于查找后面不跟著特定模式的位置,但不消耗字符 | \d(?!abc)可匹配后面不跟著abc的數(shù)字,如1def中的1 | |
(?<=...) | 反向肯定預查,用于查找前面跟著特定模式的位置,但不消耗字符 | (?<=def)\d可匹配前面跟著def的數(shù)字,如def1中的1 | |
(?<!...) | 反向否定預查,用于查找前面不跟著特定模式的位置,但不消耗字符 | (?<!def)\d可匹配前面不跟著def的數(shù)字,如abc1中的1 | |
| 常用方法 | IsMatch | 判斷輸入字符串是否與正則表達式匹配,返回bool值 | Regex.IsMatch("abc123", @"\d")返回true |
Match | 在輸入字符串中查找第一個匹配項,返回Match對象,可通過Match.Value獲取匹配的值,Match.Index獲取匹配位置等 | Regex.Match("abc123", @"\d")可獲取到第一個數(shù)字1的相關(guān)匹配信息 | |
Matches | 在輸入字符串中查找所有匹配項,返回MatchCollection集合,可遍歷獲取每個匹配項的信息 | Regex.Matches("abc123", @"\d")可獲取到所有數(shù)字1、2、3的匹配信息 | |
Replace | 將輸入字符串中匹配正則表達式的部分替換為指定的字符串 | Regex.Replace("abc123", @"\d", "#")可將abc123替換為abc### | |
Split | 根據(jù)正則表達式將輸入字符串分割成字符串數(shù)組 | Regex.Split("a1b2c3", @"\d")可將字符串分割為{"a", "b", "c"} |
在C#中使用正則表達式的基本步驟
- 引入命名空間:在C#代碼中使用正則表達式,首先需要引入
System.Text.RegularExpressions命名空間。例如:
using System.Text.RegularExpressions;
- 創(chuàng)建正則表達式對象:使用
Regex類來創(chuàng)建正則表達式對象??梢酝ㄟ^傳遞一個正則表達式模式字符串來創(chuàng)建。例如,要匹配一個簡單的電話號碼格式(假設(shè)電話號碼是數(shù)字,長度為7 - 8位),可以這樣創(chuàng)建:
Regex phoneRegex = new Regex(@"^\d{7,8}$");
- 這里
@符號是C#中的逐字字符串字面量,它告訴編譯器這個字符串中的轉(zhuǎn)義字符(如\)應(yīng)該按照字面意思處理,而不是作為C#中的轉(zhuǎn)義字符。^表示匹配字符串的開始,\d表示數(shù)字,{7,8}表示前面的元素(數(shù)字)出現(xiàn)7到8次,$表示匹配字符串的結(jié)束。 - 進行匹配操作:
- 使用IsMatch方法判斷是否匹配:例如,判斷一個字符串是否是符合上述格式的電話號碼。
string phoneNumber = "1234567";
bool isMatch = phoneRegex.IsMatch(phoneNumber);
if (isMatch)
{
Console.WriteLine("是有效的電話號碼");
}
else
{
Console.WriteLine("不是有效的電話號碼");
}
- 使用Match和Matches方法獲取匹配結(jié)果:
Match方法返回第一個匹配項。例如,從一段文本中獲取第一個符合電子郵件格式的字符串(簡單示例)。
string text = "我的郵箱是test@example.com,還有一個無效郵箱abc";
Regex emailRegex = new Regex(@"[a - zA - Z0 - 9_.]+@[a - zA - Z0 - 9_.]+\.[a - zA - Z]+");
Match match = emailRegex.Match(text);
if (match.Success)
{
Console.WriteLine("找到的郵箱是: " + match.Value);
}
Matches方法返回所有匹配項的集合。例如,從一段文本中獲取所有的數(shù)字。
string numberText = "abc123def456";
Regex numberRegex = new Regex(@"\d+");
MatchCollection matches = numberRegex.Matches(numberText);
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
正則表達式的高級用法
- 分組(Grouping):使用括號
()可以將正則表達式的一部分進行分組。分組可以用于提取匹配的特定部分或者在匹配過程中應(yīng)用量詞到一組字符上。例如,在匹配日期格式(假設(shè)為yyyy - MM - dd)時,可以這樣分組來提取年、月、日。
string dateText = "2024-05-10";
Regex dateRegex = new Regex(@"(\d{4})-(\d{2})-(\d{2})");
Match match = dateRegex.Match(dateText);
if (match.Success)
{
Console.WriteLine("年: " + match.Groups[1].Value);
Console.WriteLine("月: " + match.Groups[2].Value);
Console.WriteLine("日: " + match.Groups[3].Value);
}
- 零寬斷言(Zero - width Assertions):這是一種特殊的匹配方式,它不消耗字符,只是在某個位置進行斷言。例如,
(? =...)是正向肯定預查,它用于查找后面跟著特定模式的位置。假設(shè)要找到后面跟著abc的數(shù)字,可以這樣寫:
string assertText = "1abc 2def";
Regex assertRegex = new Regex(@"\d(? =abc)");
MatchCollection matches = assertRegex.Matches(assertText);
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
- 替換匹配的文本(Regex.Replace):可以使用
Regex.Replace方法來替換匹配正則表達式的文本部分。例如,將一段文本中的所有數(shù)字替換為#。
string replaceText = "abc123def"; string replaced = Regex.Replace(replaceText, @"\d", "#"); Console.WriteLine(replaced);
總結(jié)
到此這篇關(guān)于C#正則表達式的詳細使用說明的文章就介紹到這了,更多相關(guān)C#正則表達式使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# WinFrom中show和ShowDialog的區(qū)別詳解
想了解 C# WinForm 里Show()和ShowDialog()的核心區(qū)別,這兩個方法都是用來顯示窗體的,最關(guān)鍵的差異是是否為「模態(tài)窗體」,下面用通俗解釋 + 表格對比 + 實際代碼示例講清楚,新手也能直接套用,需要的朋友可以參考下2026-02-02
C#中將dateTimePicker初始值設(shè)置為空
本文主要介紹了C#中將dateTimePicker初始值設(shè)置為空,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02
C#基于QRCode實現(xiàn)動態(tài)生成自定義二維碼圖片功能示例
這篇文章主要介紹了C#基于QRCode實現(xiàn)動態(tài)生成自定義二維碼圖片功能,結(jié)合實例形式分析了C#使用QRCode動態(tài)生成二維碼圖片相關(guān)操作技巧,需要的朋友可以參考下2019-02-02
Unity 使用TexturePacker打包圖集的操作方法
這篇文章主要介紹了Unity 使用TexturePacker打包圖集的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08

