C 資料結構和演算法學習系列十 正規表示式

2021-08-31 17:51:36 字數 2523 閱讀 2231

所謂正規表示式是一種用於描述字串中字元格式的語言,它提供了對應於重複字元、替換符符以及分組字元的描述符。正規表示式既可以用來執行字串的搜尋,也可以用於字串的替換。正規表示式本身就是乙個定義了用於其他字串搜尋模式的字串。通常情況下,正規表示式中的字元與其自身匹配,因此正規表示式「the」可以與字串中任意位置找到的同樣字串行相匹配。正規表示式還可以包含稱之為元字元的特殊字元。元字元用於表示重複、替換或者分組。

1.正規表示式使用。為了使用正規表示式, 需要把regex 類引入程式。大家可以在system.text.regularexpression 名字域中找到這種類。一旦把這種類匯入了程式,就需要決定想要用regex 類來做什麼事情了。如果想要進行匹配,就需要使用match 類。如果打算做替換,則不需要match 類了。取而代之的是要用到regex 類的replace 方法。

首先來看看如何在字串中進行單詞匹配操作吧。假設給定乙個樣例字串「the quick brown fox jumped over the lazy dog」,這裡想要在字串中找到單詞「the」。如下:

using system;

using system.text.regularexpressions;

class chapter10

}}

if 語句使用了一種match 類的屬性success 來確定是否是成功匹配。如果值返回為true,那麼正規表示式在字串中至少匹配了一條子串。否則的話,儲存在success 中的值就是false。程式還可以有另外一種方法來檢視是否匹配成功。通過把正規表示式和目標字串傳遞給ismatch 方法的方式可以對正規表示式進行**試。如果與正規表示式產生了匹配,那麼這種方法就返回true,否則返回false。如下:
if (regex.ismatch(str1, "the"))

用match 類的乙個問題就是它只能儲存乙個匹配。在前面的例項中,針對子串「the」存在兩個匹配。這裡可以使用另外一種類matches 類來儲存與正規表示式的多個匹配。為了處理所有找到的匹配可以把匹配儲存到matchcollection 物件中。如下:
using system;

using system.text.regularexpressions;

class chapter10

}

接下來要討論如何用replace 方法把乙個字串用另乙個字串來替換。replace 方法可以作為一種帶有三個引數的類方法來進行呼叫:乙個目標字串,要替換的子串,以及用作替換的子串。如下:

string s = "the quick brown fox jumped over the brown dog";

s = regex.replace(s, "brown", "black");

2.數量詞的用法 。在編寫正規表示式的時候,經常會要想正規表示式新增數量型資料,諸如「精確匹配兩次」或者「匹配一次或多次」。利用數量詞就可以把這些資料填加到正規表示式裡面了。

(1).+這個數量詞說明正規表示式應該匹配乙個或多個緊接的字元。

(2).*這個數量詞說明正規表示式應該匹配零個或多個緊接的字元。

(3).?這個數量詞說明正規表示式應該匹配零次或一次的數量詞。

(4).這個數量詞說明正規表示式應該匹配乙個有限數量,n是要找到的匹配數量。

(5).;

foreach (string word in words)

if (regex.ismatch(word, "ba d"))

console.writeline(word);

}}3.字元類的使用。字元類可以用多組字元構成。如果想要既匹配小寫字母也匹配大寫字母,那麼可以把正規表示式寫成這樣:「[a-za-z]」。當然,如果需要包括全部十個數字,也可以編寫像[0-9]這樣由數字組成的字元類。此外,通過在字元類前面放置乙個脫字符號(^)的方法人們還可以建立字元類的反或者字元類的否定。例如,如果有字元類[aeiou]來表示母音類,那麼就可以編寫[^aeiou]來表示子音或非母音。如果把這三個字元類合併,就可以形成正規表示式用法中所謂的單詞。正規表示式就像這個樣子:[a-za-z0-9]。這裡還有乙個可以用來表示同樣類的較短小的字元類:\w。\w 用來表示\w 的反,也或者用來表示非單詞字元(比如標點符號)。此外,還可以把數字字元類([0-9])寫成\d(注意由於在c#語言中反斜桿後跟著其他字元很可能是轉義序列,所以諸如\d 這樣的**在c#語言中都以\\d形式來說明正規表示式而非轉義**)。而非數字字元類([^0-9])則可以寫成\d 這樣。最後,因為空格符在文字處理中扮演著非常重要的角色,所以把\s 用來表示空格字元,而把\s 用來表示非空格字元。

總結:

正規表示式在大多數情況下可以快速的實現查詢和替換,不過要對他們的運用做到很熟悉的話,主要是乙個日積月累的過程,用得多了,自然就得心應手了。

資料結構和演算法學習 棧

棧是一種重要的線性結構,可以說是線性表的一種具體形式 官方定義 棧是乙個後進先出的線性表,它要求只在表尾進行刪除和插入操作 棧是一種特殊的線性表 順序表 鍊錶 操作上有一些特殊要求 1.棧的元素必須 後進先出 2.棧的操作只能在這個線性表的表尾進行。注 對於棧來說,表尾稱為棧的棧頂 top 相應的表...

資料結構和演算法學習重點

1 資料結構是指一組資料的儲存結構 2 演算法就是運算元據的方法 3 資料結構和演算法是相輔相成的,資料結構是為演算法服務的,而演算法要作用在特定的資料結構之上。資料結構和演算法解決的是如何更省 更快地儲存和處理資料的問題,因此,我們就需要乙個考量效率和資源消耗的方法,這就是複雜度分析方法。在學習資...

資料結構和演算法學習筆記

資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科。程式設計 資料結構 演算法 簡單來說資料結構就是關係,元素相互之間存在的一種或多種特定關係的集合。1.1 邏輯結構和物理結構 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條...