程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> [正則表達式]基礎知識總結,正則表達式基礎知識

[正則表達式]基礎知識總結,正則表達式基礎知識

編輯:C#入門知識

[正則表達式]基礎知識總結,正則表達式基礎知識


  一直只是知道正則表達式的用途,但具體沒使用過,今天稍微了解了下它的基礎用法。這裡總結一下。

  

  命令空間:System.Text.RegularExpressions

  用途:

  RegEx類:

   是對正則表達式引擎的類抽象,通過調用該抽象類的不同方法,實現對正則表達式的處理。

   該類的主要方法如下所示,具體用途相信通過方法名即可知道:

  

                             

 

  了解完Regex類的主要方法後,還需要關注三個比較重要的類和它們的層次,分別是:Match類、Group類和Capture類。

  假設有如下字符串,input(原始字符串),pattern(正則表達式).

  Match類:模式匹配返回的一個結果,比如調用Regex.Match()方法,會根據輸入的正則表達式(pattern),在字符串(input)中進行匹配,每個匹配的結果返回一個Match類實例。

  Group類:表示正則表達式(pattern)中的子表達式的匹配結果,用括號括起來,如patter=@"(\d{1,2})[.,]?(\d{1,3})"。就有兩個組:(\d{1,2})和(\d{1,3})。

  Capture類:返回匹配子表達式的結果。CaptureCollections返回所有符合子表達式的結果。

  Group類與Capture類的區別

  參考MSDN上的幫助文檔(http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.group(v=vs.110).aspx),通過以下代碼來說明它們的區別:

 1 using System;
 2 using System.Text.RegularExpressions;
 3 
 4 public class Example
 5 {
 6    public static void Main()
 7    {
 8       string pattern = @"(\b(\w+?)[,:;]?\s?)+[?.!]";
 9       string input = "This is one sentence. This is a second sentence.";
10 
11       Match match = Regex.Match(input, pattern);
12       Console.WriteLine("Match: " + match.Value);
13       int groupCtr = 0;
14       foreach (Group group in match.Groups)
15       {
16          groupCtr++;
17          Console.WriteLine("   Group {0}: '{1}'", groupCtr, group.Value);
18          int captureCtr = 0;
19          foreach (Capture capture in group.Captures)
20          {
21             captureCtr++;
22             Console.WriteLine("      Capture {0}: '{1}'", captureCtr, capture.Value);
23          }
24       }   
25    }
26 }
27 // The example displays the following output: 
28 //       Match: This is one sentence. 
29 //          Group 1: 'This is one sentence.' 
30 //             Capture 1: 'This is one sentence.' 
31 //          Group 2: 'sentence' 
32 //             Capture 1: 'This ' 
33 //             Capture 2: 'is ' 
34 //             Capture 3: 'one ' 
35 //             Capture 4: 'sentence' 
36 //          Group 3: 'sentence' 
37 //             Capture 1: 'This' 
38 //             Capture 2: 'is' 
39 //             Capture 3: 'one' 
40 //             Capture 4: 'sentence'

  

  如果在字符後添加了quantifiers(數量詞),如在pattern表達式中,(\w+?)用來匹配出現在一個句子當中的多個單詞。但是Group對象只返回最後一個匹配(\w+?)的對象。而Capture記錄的是每一次匹配(\w+?)的對象。如果沒有添加數量詞,Capture和Group可用來表示同一個對象。

  下圖表示了三者的繼承關系(左圖),在使用時的層次關系(右圖):

  接下來,就是介紹如何寫正則表達式。這就是對不同字符串的分類和抽象表示的過程。主要包括以下9種類型:

  

  理清楚這些類型之間的關系後,使用正則表達式就會有一個比較清晰的思路和概念。正則表達式的關鍵就是在於如何寫正確的匹配語句,它是後續其它操作的基礎。具體的類型格式可參考MSDN的:Quick Reference in PDF (.pdf) format。(具體下載鏈接:http://msdn.microsoft.com/en-us/library/hs600312.aspx)。

 

  下面附上一些自己練習的簡單正則表達式,以方便有一個直觀理解:

      1.將首字母替換成大寫:

1 string input = "this is a Good mornIng.";
2 string pattern = @"\b([a-z])([a-zA-Z]{2,})\b";
3 string result = Regex.Replace(input, pattern,
match=>match.Groups[1].Value.ToUpper()+match.Groups[2].Value); 4 Console.WriteLine(result); 5 6 //結果:This is a Good MornIng.

 

  2.替換貨幣符號:

1 string word = "$12.4 $0.2 $2 3.5";
2 string sub = "$1";
3 string pattern = @"\p{Sc}*(\d+[,.]?\d*)";
4 string result = Regex.Replace(word, pattern, "($1)");
5 Console.WriteLine(result);
6 
7 //Result:
8 //(12.4) (0.2) (2) (3.5)

 

 

  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved