【轉】字符串和正則表達式

System.String是一個功能很是強大且用途很是普遍的基類,但它不是.NET中惟一與字符串相關的類,特別是System.Text和System.Text.RegularExpressions命名空間中的類。本文主要介紹內容: 一、建立字符串 二、格式化表達式 三、正則表達式
1、System.String類 System.String是一個類,專門用於存儲字符串,容許對字符串進行許多操做。 例如:正則表達式

string  messsage1  =   " Hello " //  return "Hello" message1  +=   " , There " //  return "Hello, There" string  message2  =  message1  +   " ! "   // return "Hello, There!"

C#還容許相似於索引符的語法來提取指定的字符:ide

char  char4  =   " message " [ 4 ];  // return 'a'

1.1 建立字符串
string類的功能很是強大,可是它存在一個問題:重複修改給定的字符串,效率很低。它其實是一個不可變的數據類型,一旦對字符串進行了初始化,該字符串就不能改變了。修改該字符串的內容時,其實是建立一個新的字符串,若是有必要,能夠把舊的字符串內容複製到新字符串中。 例如:ui

string  greetingText =   " Hello.  " ; greetingText  +=   " This is source code " ;

在執行這段代碼時,首先建立一個String對象greetingText,並初始化爲文本"Hello. "(最後是一個空格)。此時.NET運行庫爲該字符串分配足夠的內存在保存初始文本(7個字符),再設置變量greetingText,表示這個字符串實例。從表面上看,執行下一句代碼,是把新的文本直接添加到初始文本的後面,但實際並不是如此執行的。而是另外建立一個新的字符串實例,給他分配足夠的內存,以保存合併起來的文本,而後更新存儲再變量greetingText中的地址,使變量指向新的字符串對象。舊的字符串對象被撤銷了引用——再也不有變量引用它,下一次垃圾收集器清理應用程序中全部未使用的對象時,就會刪除它。
當字符串的長度很大的時候,這樣作顯然影響了執行效率,因此C#中用System.Text.StringBuilder類來處理較長的字符串。StringBuilder類功能沒有String類強大,功能僅限於替換和添加或刪除字符串中的文本,可是工做方式很是高效。 用StringBuilder類建立字符串:spa

StringBuilder greetingBuilder  =   new  StringBuilder( " Hello from all the guys at Wrox Press.  " 150 ); // 顯示給定初始文本內容和分配內存長度 StringBuilder message  =   new  StringBuilder( " Hello " ); // 僅僅給出字符串,系統自動分配內存 StringBuilder message2  =   new  StringBuilder( 20 ); // 給指定容量建立一個空的StringBuiler 

StringBuiler類有兩個主要屬性: Length指定字符串的實際長度 Capacity是字符串佔據存儲單元的長度 StringBuilder類的主要方法: Append()方法,在字符串尾部添加新的文本 Replace()方法,替換文本
注意:不能把StringBuilder轉換爲String,若是要把StringBuilder的內容輸出爲String,惟一的方式是使用ToString()方法。
1.2 格式化字符串code

double  d  =   13.45 ; int  i  =   45 ; sting result  =  String.Format( " The double is {0,10:E} and the int contains {1} " ,d,i);

{}中的0、1等分別對應後面的d和i,10:E是格式,表示佔10個字符,若是數字是正數,結果向右對齊,若是是負數則左對齊。E表示科學計數法。orm

格式符 應用 含義 示例
C 數字類型 專用場合的貨幣值 $4834.50(USA)
D 只用於整數類型 通常的整數 4834
E 數字類型 科學計數法 4.834E+003
F 數字類型 小數點後的位數固定 4834.50
G 數字類型 通常的數字 4834.5

N對象

數字類型 一般是專用場合的數字格式 4,834.50
P 數字類型 百分比計數法 432,000.00%
X 只用於整數類型 16進制格式 1120(若是須要顯示0x1120,須要寫上0x)

2、正則表達式
2.1 正則表達式概述
正則表達式語言是一種專門用於字符串處理的語言,使用正則表達式能夠對字符串執行許多複雜而高級的操做,例如:區分URI的各個元素(例如:http://www.sina.com.cn,提取協議、計算機名、文件名等)。 在C#中只須要用System.Text.RegularExpressions類的RegEx()方法或者調用靜態方法RegEx(),給它們傳遞要處理的字符串和一個正則表達式,就能夠完成咱們所須要的操做,獲得預期的結果了。 下面列出正則表達式經常使用字符表索引

符號 含義 示例 匹配示例
^ 輸入文本的開頭 ^B B,但只能是文本中的第一個字符
$ 輸入文本的結尾 X$ X,但只能是文本的最後一個字符
. 除了換行符(\n)之外的全部單個字符 i.ation isation、ization
* 能夠重複0次或者屢次的前導字符 ra*t rt、rat、raat、raaat等
+ 能夠重複1次或者屢次的前導字符 ra+t rat、raat和raaat等(不包含rt)
? 能夠重複0次或者1次的前導字符 ra?t rt或者rat
\s 任何空白字符 \sa [space]a、\ta、\na等
\S 任何不是空白的字符 \SF

aF、rF、cF等,但不能是\tF內存

\b 字邊界 ion\b 以ion結尾的任何字
\B 是否是字邊界的位置 \BX\B 字中間的任何X

若是搜索一個元字符,能夠用.(一個句點)表示全部除了\n之外的字符,而\.表示一個點。 能夠把要替換的字符放到括號中:[1|C]表示字符能夠是1或者C,若是要搜索map或者man,能夠用ma[n|p]。 方括號也能夠表示範圍:[a-z]表示a到z的全部小寫字母。
示例以下:ci

string  Text  =   @" This comprehensive compendium provides a broad and thorough investigation of all aspects of programming with ASP.NET " ; string  pattern  =   @" \ba " ; // 查找全部以a開頭的字符 MatchCollection matches  =  Regex.Matches(Text, pattern, RegexOptions.IgnoreCase);
相關文章
相關標籤/搜索