C# - 正則表示式:初學者指南
您好,未來的編程超級巨星!? 您準備好踏上一段令人興奮的旅程,進入C#中的正則表示式(RegEx)世界了嗎?別擔心,如果您之前從未寫過一行代碼——我在這裡,會一步一步地指導您完成這次冒險。讓我們一起潛入水中吧!
正則表示式是什麼?
在我們深入细节之前,讓我們先了解正則表示式是什麼。想像您是一位偵探?️♀️,在浩瀚的文本海洋中尋找一個特定的模式。正則表示式就是您的放大鏡,幫助您根據模式搜索、匹配和操縱文本。酷炫吧?
定義正則表示式的構造
現在,讓我們看看一些用來創建這些強大模式的基本構建塊。可以把這些想像成我們RegEx世界中的LEGO積木!
構造 | 描述 | 示例 |
---|---|---|
. | 匹配任何單個字符(除換行符外) | a.c 匹配 "abc"、"a1c"、"a@c" 等。 |
* | 匹配前一个字符的零次或多次出現 | ab*c 匹配 "ac"、"abc"、"abbc"、"abbbc" 等。 |
+ | 匹配前一个字符的一次或多次出現 | ab+c 匹配 "abc"、"abbc"、"abbbc",但不匹配 "ac" |
? | 使前一个字符變為可選 | colou?r 匹配 "color" 和 "colour" |
^ | 匹配行的開頭 | ^Hello 匹配 "Hello World",但不匹配 "Say Hello" |
$ | 匹配行的結尾 | World$ 匹配 "Hello World",但不匹配 "World Cup" |
[ ] | 匹配集合中的任何單個字符 | [aeiou] 匹配任何元音字母 |
[^ ] | 匹配不在集合中的任何單個字符 | [^aeiou] 匹配任何輔音字母 |
( ) | 將字符組合成一組 | (ab)+ 匹配 "ab"、"abab"、"ababab" 等。 |
別擔心,如果這些看起來讓人眼花繚亂——我們很快就会看到這些的使用!
Regex類
在C#中,我們使用Regex
類來處理正則表示式。這就像我們的瑞士軍刀?,用於模式匹配。讓我們看看如何使用它!
示例 1:尋找簡單模式
讓我們從一些簡單的東西開始。想像您正在構建一個程序來檢查電子郵件地址是否有效。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string email = "[email protected]";
string pattern = @"@.*\.";
Regex regex = new Regex(pattern);
Match match = regex.Match(email);
if (match.Success)
{
Console.WriteLine("有效的電子郵件地址!");
}
else
{
Console.WriteLine("無效的電子郵件地址!");
}
}
}
在這個示例中:
- 我們創建了一個
Regex
對象,並使用我們的模式@"@.*\."
。 - 這個模式尋找一個@符號,後跟任何字符(.*),然後是一個點(\.)。
- 我們使用
Match
方法在我們的電子郵件字符串中找到這個模式。 - 如果成功,我們認為電子郵件地址是有效的。
請記住,這是一個非常簡單的檢查。真正的電子郵件驗證要複雜得多!
示例 2:替換文本
現在,想像您正在構建一個聊天應用程序,並且您想將所有出現的"LOL"替換為"laugh out loud"。RegEx來救援!
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = "OMG! 你看到了嗎?LOL! 我簡直不敢相信。LOL";
string pattern = @"\bLOL\b";
string replacement = "laugh out loud";
string result = Regex.Replace(input, pattern, replacement);
Console.WriteLine(result);
}
}
這裡發生了什麼:
- 我們使用
\b
來匹配單詞邊界。這確保我們只替換"LOL",當它是整個單詞時。 -
Regex.Replace
負責找到所有匹配並替換它們。
輸出:"OMG! 你看到了嗎?laugh out loud! 我簡直不敢相信。laugh out loud"
示例 3:提取信息
最後但同樣重要的是,讓我們從推文中提取所有標籤。如果您正在為社交媒體應用程序構建一個熱門話題功能,這可能是您需要做的一件事。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string tweet = "剛完成我的 #CSharp 課程!#編程 #學習編程";
string pattern = @"#\w+";
MatchCollection matches = Regex.Matches(tweet, pattern);
Console.WriteLine("找到的標籤:");
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
}
}
讓我們分解一下:
- 我們的模式
#\w+
尋找一個#後跟一個或多個單詞字符。 -
Regex.Matches
在我們的字符串中找到所有模式的出现。 - 然後我們遍历匹配并打印每个标签。
輸出:
找到的標籤:
#CSharp
#編程
#學習編程
總結
恭喜您!? 您已經踏出了進入C#中正則表示式世界的第一步。我們已經涵蓋了基礎,從簡單的模式匹配到替換文本以及提取信息。記住,RegEx是一個強大的工具,但就像任何超能力一樣,要精通它需要練習。
別氣餒,如果起初它看起來很棘手。我記得我第一次教RegEx時,有一個學生非常困惑,他說這看起來就像一隻貓走過了他的鍵盤!但隨著練習,他成了一名RegEx大師。你也可以做到!
繼續嘗試,嘗試不同的模式,很快你就能像專家一樣在草堆中找到 needles。快樂編程!??
Credits: Image by storyset