C# - 正則表示式:初學者指南

您好,未來的編程超級巨星!? 您準備好踏上一段令人興奮的旅程,進入C#中的正則表示式(RegEx)世界了嗎?別擔心,如果您之前從未寫過一行代碼——我在這裡,會一步一步地指導您完成這次冒險。讓我們一起潛入水中吧!

C# - Regular Expressions

正則表示式是什麼?

在我們深入细节之前,讓我們先了解正則表示式是什麼。想像您是一位偵探?️‍♀️,在浩瀚的文本海洋中尋找一個特定的模式。正則表示式就是您的放大鏡,幫助您根據模式搜索、匹配和操縱文本。酷炫吧?

定義正則表示式的構造

現在,讓我們看看一些用來創建這些強大模式的基本構建塊。可以把這些想像成我們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