版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C#程序設(shè)計第2章操作字符串目錄2.1案例引入2.2字符串 2.2.1字符串的基本概念2.2.2字符串的查找2.2.3字符串的比較2.2.4字符串的插入2.2.5字符串的刪除2.2.6子字符串的獲得 2.3可變字符串2.3.1StringBuilder的簡單介紹2.3.2StringBuilder的作用2.4使用正則表達式2.4.1正則表達式概述2.4.2使用正則表達式替換文本2.4.3使用正則表達式搜索2.5回到案例2.6小結(jié)2.1案例引入2.1案例引入相信大家都有過注冊某網(wǎng)站或者論壇會員的經(jīng)歷,而大家在注冊時也都會填寫電子郵箱等信息。但是假如所輸入的電子郵箱地址不合法,則無法通過驗證。本案例演示了在c#中使用正則表達式驗證輸入的電子郵件地址格式是否合法,驗證成功或者不成功的界面顯示如下:
2.1案例引入
當大家學(xué)習(xí)了本章中字符串的操作以及正則表達式的模式匹配驗證功能后,就能夠很容易寫出上述驗證電子郵件格式的代碼了。
提示:郵件地址規(guī)范是:確保電子郵件地址含有符號“@”,且只出現(xiàn)一次;含有符號“.”,且只出現(xiàn)一次;除@和.外只能輸入字母,數(shù)字和下劃線“_”,符號“_”不能出現(xiàn)在電子郵件地址的開頭。2.2字符串2.2.1字符串的基本概念
字符串是Unicode字符的有序集合,用于表示文本,在C#的內(nèi)置類型中,字符串是唯一的應(yīng)用類型。該類型是不可變的,意味著字符串一旦被創(chuàng)建好就不能再被修改,所有看上去修改了字符串的方法實際上并沒有修改它。1.創(chuàng)建字符串變量stringstr=“thisisanewstring”
在上述定義中,定義了一個字符串變量str,該變量是string類型的,該變量被初始化成字符序列“thisisanewstring”。字符串變量是引用類型的變量,聲明一個字符串,即創(chuàng)建了對內(nèi)存里某個空間的引用。
2.2字符串2、用索引訪問字符串
字符串,原本就是排在一起的字符,C#提供了用“下標”(索引)來訪問字符串中的字符,例如: stringstr=”ruanjian”;
這里內(nèi)存中將“r”分配編號0,“u”分配編號1,然后依次增加...
因此,如果需要訪問j,數(shù)一數(shù),編號是4,所以可以這樣來得到字符“j”的編號。字符串也有一個Length屬性,可以得到字符串的長度,也就是通過Length返回調(diào)用的String中的字符數(shù)。
2.2字符串usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceLength{classProgram{staticvoidMain(string[]args){//定義字符串"Marry"stringa="Marry";//定義字符串的Length屬性獲得字符串的長度,并將其輸出至控制臺中 Console.WriteLine("字符串的長度是{0}",a.Length);//分別獲得a的倒數(shù)第一個和第二個字符 charb=a[a.Length-2]; charc=a[a.Length-1];
//輸出獲得的字符 Console.WriteLine("倒數(shù)第二個字母是{0}",b); Console.WriteLine("倒數(shù)第一個字母是{0}",c);Console.ReadLine();}}}2.2字符串代碼編寫完成后,按“F5”鍵或者單擊工具欄中的“啟動調(diào)試”按鈕,顯示運行結(jié)果如下所示:字符串的長度是5倒數(shù)第二個字母是r倒數(shù)第一個字母是y
2.2字符串2.2.2字符串的查找.NET中提供了查找字符串中字符或字符串的方法,采用依次順序比較的方法,共有4種方法,分別是IndexOf方法、LastIndexOf方法、IndexOfAny方法、LastIndexOfAny方法,下面將對這幾種方法展開介紹:1.IndexOfIndexOf方法用于搜索某個特定的字符或子串第一次出現(xiàn)的位置,該方法區(qū)分大小寫,并從字符串的首字符開始以0計數(shù)。如果字符串中不包含這個字符或子串,則返回-1,IndexOf有6種重載形式。
2.2字符串定位字符:intIndexOf(charvalue)intIndexOf(charvalue,intstartIndex)intIndexOf(charvalue,intstartIndex,intcount)定位子串:intIndexOf(stringvalue)intIndexOf(stringvalue,intstartIndex)intIndexOf(stringvalue,intstartIndex,intcount)上述各參數(shù)含義如下:□Value:待定位的字符或者子串?!鮯tartIndex:在總串中開始搜索的起始位置?!魿ount:在總串中從起始位置開始搜索的字符數(shù)。
2.2字符串2.LastIndexOf方法同IndexOf類似,LastIndexOf用于搜索在一個字符串中,某個特定的字符或子串最后一次出現(xiàn)的位置,其方法定義和返回值都與IndexOf相同。下面的例子演示了在“Marry”中查找字符“r”第一次出現(xiàn)的位置和最后一次出現(xiàn)的位置。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceFindChar{classProgram{staticvoidMain(string[]args){//定義了一個字符串和一個字符 Stringa="Marry"; charb='r'; //搜素字符‘r’在字符串"Marry"中第一次出現(xiàn)的位置 intc=a.IndexOf(b); //搜素字符‘r’在字符串"Marry"中最后一次出現(xiàn)的位置 intd=a.LastIndexOf(b); Console.WriteLine("第一個r出現(xiàn)的位置在{0}",c); Console.WriteLine("最后一個r出現(xiàn)的位置在{0}",d);}}}
2.2字符串在上面的示例中,IndexOf方法用于返回與字符串Marry中字符“r”的第一次和最后一次出現(xiàn)相對應(yīng)的索引值。再次提醒,索引值是從0開始的。代碼編寫完成后,按“F5”鍵或者單擊工具欄中的“啟動調(diào)試”按鈕,顯示運行結(jié)果如下所示:第一個r出現(xiàn)的位置在2最后一個r出現(xiàn)的位置在3
2.2字符串3.IndexOfAny方法IndexOfAny方法功能同IndexOf類似,區(qū)別在于,可以搜索在一個字符串中,出現(xiàn)在一個字符數(shù)組中的任意字符第一次出現(xiàn)的位置。同樣,該方法區(qū)分大小寫,并從字符串的首字符開始以0計數(shù)。如果字符串中不包括這個字符或子串,則返回-1。IndexOfAny有3種重載形式:intIndexOfAny(char[]anyOf)intIndexOf(char[]anyOf,intstartIndex)intIndexOf(char[]anyOf,intstartIndex,intcount)在上述重載形式中,參數(shù)含義如下:□anyOf:待定位的字符數(shù)組,方法將返回這個數(shù)組中任意一個字符第一次出現(xiàn)的位置?!鮯tartIndex:在總串中開始搜索的起始位置。□Count:在總串中從起始位置開始搜索的字符數(shù)。2.2字符串4.LastIndexOfAny方法同IndexOfAny類似,LastIndexOfAny用于搜索在一個字符串中,出現(xiàn)在一個字符數(shù)組中任意字符最后一次出現(xiàn)的位置。下面的例子演示了使用IndexOfAny方法和LastIndexOfAny方法在“Marry”中查找字符“r”第一次出現(xiàn)的位置和最后一次出現(xiàn)的位置。2.2字符串usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;
namespaceFindChar{classProgram{staticvoidMain(string[]args){//定義了一個字符串和一個字符 Stringa="Marry"; char[]anyOf={'M','a','r'}; //搜素字符‘r’在字符串"Marry"中第一次出現(xiàn)的位置 intb=a.IndexOfAny(anyOf); //搜素字符‘r’在字符串"Marry"中最后一次出現(xiàn)的位置 intc=a.LastIndexOfAny(anyOf); Console.WriteLine("第一個r出現(xiàn)的位置在{0}",b); Console.WriteLine("最后一個r出現(xiàn)的位置在{0}",c);}}}2.2字符串
在上面的示例中,LastIndexOfAny方法用于返回一個字符數(shù)組中char[]anyOf={'M','a','r'}任意字符最后一次出現(xiàn)的位置字符,也即字符“r”最后一次出現(xiàn)相對應(yīng)的索引值。代碼編寫完成后,按“F5”鍵或者單擊工具欄中的“啟動調(diào)試”按鈕,顯示運行結(jié)果如下所示:第一個r出現(xiàn)的位置在0最后一個r出現(xiàn)的位置在32.2字符串2.2.3字符串的比較C#語言中字符串的比較,就是比較字符串的長度大小,這是基字符串類的靜態(tài)重載方法。在其最常見的形式中,此方法可用于根據(jù)兩個字符串的字母排序順序直接比較它們。String類有四種方法:Compare()、CompareTo()、CompareOrdinal()、Equals()。Compare()方法是CompareTo()方法的靜態(tài)版本。Compare()方法有很多個重載方法。只要使用“=”運算符就會調(diào)用Equals()方法,Equals()方法與“=”是等價的。CompareOrdinal()方法對兩個字符串比較不考慮本地區(qū)域性。2.2字符串String.Compare比較結(jié)果的含義:String.Equals比較結(jié)果的含義:2.2字符串2.2.3字符串的比較C#語言中字符串的比較,就是比較字符串的長度大小,這是基字符串類的靜態(tài)重載方法。在其最常見的形式中,此方法可用于根據(jù)兩個字符串的字母排序順序直接比較它們。String類有四種方法:Compare()、CompareTo()、CompareOrdinal()、Equals()。Compare()方法是CompareTo()方法的靜態(tài)版本。Compare()方法有很多個重載方法。只要使用“=”運算符就會調(diào)用Equals()方法,Equals()方法與“=”是等價的。CompareOrdinal()方法對兩個字符串比較不考慮本地區(qū)域性。Equals(Strings)功能:如果實例字符串與給定的對象具有相同的值,就返回True。2.2字符串下面的例子演示了比較“Marry”和“Mary”兩個字符串,代碼如下所示。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceFindChar{classProgram{staticvoidMain(string[]args){Vara_name=”Marry”;//定義一個隱含類型的變量Stringb_name=”Mary”;//定義一個字符串變量Response.Write(b_name.CompareTo(a_name).TOString());//輸出比較結(jié)果}}}2.2字符串在上面的示例中,第03行代碼通過CompareTo方法,將變量b_name中的字符串(”Mary”)與變量a_name中的字符串(”Marry”)進行比較,結(jié)果顯示-1,說明變量b_name比變量a_name的字符串長度小。代碼編寫完成后,按“F5”鍵或者單擊工具欄中的“啟動調(diào)試”按鈕,顯示運行結(jié)果如下所示:-1
在C#語法中所有數(shù)據(jù)類型都可以通過ToString方法,將數(shù)據(jù)以字符串的形式輸出。2.2字符串2.2.4字符串的插入字符串的插入操作是通過Insert()方法來實現(xiàn)的,就是從字符串中的某一位置開始,插入指定的字符串。PublicstringInsert(intstartIndex,stringstr)startInde即要插入字符串的開始位置,參數(shù)str即所要插入的字符串,返回值為插入str后的一個新的字符串。如果str是一個空引用,或者startIndex是一個負數(shù),或者startIndex的長度大于String的位置,將會拋出異常。下面的例子演示了在字符串“Marry”的0位置處插入字符串“Hello”,代碼如下所示。2.2字符串usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceFindChar{classProgram{staticvoidMain(string[]args){Stringa=”Marry”;//定義一個字符串變量Response.Write(a.Insert(0,”Hello”);//在位置0上插入字符串“Hello”}}}2.2字符串
在上面的示例中,第13行代碼通過Insert方法,在字符串“Marry”的0位置處插入字符串“Hello”,字符串Hello后有一空格,因此最后顯示結(jié)果為HelloMarry。代碼編寫完成后,按“F5”鍵或者單擊工具欄中的“啟動調(diào)試”按鈕,顯示運行結(jié)果如下所示:HelloMarry2.2字符串
2.2.5字符串的刪除字符串的刪除操作是通過Remove()方法來實現(xiàn)的,參數(shù)startIndex為刪除開始的位置值,參數(shù)length為要刪除字符的長度。即要刪除掉從某一位置開始,一定長度的字符,最后返回值為一個新的、被刪除了的字符串。PublicstringRemove(intstartIndex,stringlength)下面的例子演示了在字符串“Marry”中,從位置2開始刪除兩個字符,代碼如下所示。2.2字符串
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;
namespaceFindChar{classProgram{staticvoidMain(string[]args){Stringa=”Marry”;//定義一個字符串變量Response.Write(a.Remove(2,2));//在位置2開始刪除兩個字符}}}2.2字符串
在上面的示例中,第13行代碼通過Insert方法,在字符串“Marry”的位置2處刪除兩個字符。
代碼編寫完成后,按“F5”鍵或者單擊工具欄中的“啟動調(diào)試”按鈕,顯示運行結(jié)果如下所示:May2.2字符串
2.2.6子字符串的獲得子字符串的截取操作是通過Substring()方法來獲得字符串中指定位置的指定長度的字符。參數(shù)startIndex為開始的位置值,參數(shù)length為要截取字符的長度。PublicstringSubstring(intstartIndex,stringlength)下面的例子演示了在字符串“Marry”中,從位置2開始刪除兩個字符,代碼如下所示。2.2字符串usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;
namespaceFindChar{classProgram{staticvoidMain(string[]args){Stringa=”Marry”;//定義一個字符串變量Response.Write(a.Substring(2,4));//在位置2開始截取4個字符}}}2.2字符串
在上面的示例中,第13行代碼通過Substring方法,在字符串“Marry”的位置2處截取4個字符。代碼編寫完成后,按“F5”鍵或者單擊工具欄中的“啟動調(diào)試”按鈕,顯示運行結(jié)果如下所示:arry2.2字符串2.2.7字符串的替換字符串的替換操作是通過Replace()方法來實現(xiàn)字符串的替換的。Replace()方法可以替換掉一個字符串中的某些字符或者子串。PublicstringReplace(chara,charb)替換字符串中的單個字符PublicstringReplace(stringa,charb)替換字符串中的子串下面的例子演示了在字符串“Marry”中,分別將字符串“Marry”中的字符a替換成字符e以及將字符串a(chǎn)替換成字符串oo,代碼如下所示。2.2字符串usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceFindChar{classProgram{staticvoidMain(string[]args){Stringa=”Marry”;//定義一個字符串變量Response.Write(a.Replace(‘a(chǎn)’,‘e’));//替換單個字符Response.Write(a.Replace(“a”,‘oo’));//替換字符串}}}2.2字符串在上面的示例中,第13行代碼通過Replace方法,分別將字符串“Marry”中的字符a替換成字符e以及將字符串a(chǎn)替換成字符串oo。代碼編寫完成后,按“F5”鍵或者單擊工具欄中的“啟動調(diào)試”按鈕,顯示運行結(jié)果如下所示:MerryMoorry2.3可變字符串
2.3.1StringBuilder的簡單介紹StringBuilder類并沒有String類的功能強大,只提供基本的替換、添加和刪除字符串中的文本等功能,但它的工作效率非常高,當定義StringBuilder對象時可以指定內(nèi)存的內(nèi)存容量,如果不指定系統(tǒng)就會根據(jù)對象初始化時的字符串長度來確定。當你需要做很多修改字符串內(nèi)容時,這是最好的解決方案。他與字符串對象不同,字符串是由字符組成,由于字符串具有不可變性,所以每一次對字符串的變動都會重新分配內(nèi)存、創(chuàng)建一個字符串對象、丟棄舊對象,重新分配內(nèi)存過程可能會導(dǎo)致垃圾回收,這一系列的操作,會大大損傷性能。而StringBuilder類不會引發(fā)在每一個方法調(diào)用上創(chuàng)建一個新對象所帶來的開銷,僅僅在初始化StringBuilder對象時會產(chǎn)生開銷。StringBuilder類是System.Text命名空間的一個成員。它有兩個主要參數(shù):Length和Capacity分別表示字符串的實際長度和字符串占據(jù)的內(nèi)存空間長度。對字符串的修改就是在這個內(nèi)存中進行的,大大提高了添加和替換的效率。例如:StringBuildera=newStringBuilder("Hello,Welcome",150);在上述代碼中,初始化對象并為StringBuilder設(shè)置初始值為"Hello,Welcome",初始容量為150。2.3可變字符串2.3.2StringBuilder的作用◆StringBuilder的常用屬性如下所示:(1)publicintLength:該屬性用于獲取或設(shè)置此實例的長度。System.Text.StringBuilder
a
=
new
System.Text.StringBuilder();a.Append(
"123456789"
);//添加一個字符串2.3可變字符串2.3.2StringBuilder的作用◆StringBuilder的常用屬性如下所示:(1)publicintLength:該屬性用于獲取或設(shè)置此實例的長度。System.Text.StringBuilder
a
=
new
System.Text.StringBuilder();a.Append(
"123456789"
);//添加一個字符串a(chǎn).Length
=
3;//設(shè)置容量為3Console.WriteLine(
a.ToString()
);//這里輸出:123a.Length
=
30;//重新設(shè)置容量為30Console.WriteLine(
a.ToString()
+
",結(jié)尾");//這里在原來字符串后面補齊空格,至到Length的為30Console.WriteLine(
a.Length
);//這里輸出的長度為30通過上面的代碼,我們可以看出如果StringBuilder中的字符長度小于Length的值,則StringBuilde會用空格填充StringBuilder,以滿足符合長度的設(shè)置。如果StringBuilder中的字符長度大于Length的值,則StringBuilder將會截取從第一位開始的Length個字符,而忽略超出的部分。2.3可變字符串(2)publicintCapacity:該屬性用于獲取或設(shè)置可包含在當前實例所分配的內(nèi)存中的最大字符數(shù)。System.Text.StringBuilder
a
=
new
System.Text.StringBuilder();//初始化一個StringBuilderConsole.Write(
"Capacity:"
+
a.Capacity
);//這里的Capacity會自動擴大Console.WriteLine(
"\t
Length:"
+
a.Length
);
a.Append(
'1',17
);//添加一個字符串,這里故意添加17個字符,是為了看到Capacity是如何被擴充的Console.Write(
"Capacity:"
+
a.Capacity
);//這里的Capacity會自動擴大Console.WriteLine(
"\t
Length:"
+
a.Length
);
sb.Append(
'2',32
);//添加一個字符串Console.Write(
"Capacity:"
+
a.Capacity
);//這里的Capacity會自動擴大Console.WriteLine(
"\t
Length:"
+
a.Length
);a.Append(
'3',64
);//添加一個字符串Console.Write(
"Capacity:"
+
a.Capacity
);//這里的Capacity會自動擴大Console.WriteLine(
"\t
Length:"
+
a.Length
);//注意這里:如果你取消Remove這步操作,將會引發(fā)ArgumentOutOfRangeException異常,因為當前容量小于//Length,這在自己控制StringBuilder的時候務(wù)必要注意容量溢出的問題a.Remove(0,a.Length);//移出全部內(nèi)容,再測試a.Capacity
=
1;//重新定義了容量a.Append(
'a',2
);Console.Write(
"Capacity:"
+
a.Capacity
);//這里的Capacity會自動擴大Console.WriteLine(
"\t
Length:"
+
a.Length
);a.Append(
'b',4
);2.3可變字符串上面的代碼輸出的結(jié)果:
Capacity:16
Length:0
//輸出第一次,默認的Capacity是16
Capacity:32
Length:17
//第二次,我們故意添加了17個字符,于是
Capacity=Capacity*2
Capacity:64
Length:49
//繼續(xù)超出,則Capacity=Capacity*2
Capacity:128
Length:113
Capacity:3
Length:2
//清空內(nèi)容后,設(shè)置Capacity=1,重新添加了字符
Capacity:7
Length:6
//后面的結(jié)果都類似Capacity:14
Length:122.3可變字符串(3)MaxCapacity:該屬性用于設(shè)置該實例的最大容量。(4)Chars:該屬性用于獲取或設(shè)置此實例中指定字符位置處的字符?!鬝tringBuilder的常用屬性如下所示:(1)Append方法:給當前字符串添加一個字符串publicunsafeStringBuilderAppend(stringvalue)向StringBuilder追加新元素,由于在內(nèi)部使用了指針,所以這里用了unsafe。它有18個重載,無論哪個重載方法,最終都是將新值轉(zhuǎn)為字符進行添加。(2)AppendFormat方法:添加特定格式的字符串publicunsafeStringBuilderAppendFormat(intindex,stringvalue)(3)Insert方法:在當前字符串中插入一個子字符串2.3可變字符串publicunsafeStringBuilderInsert(intindex,stringvalue)向指定位置插入字符串。(4)Replace方法:在當前字符串中用另一個字符替換某個字符,或者用另一個子字符替換某個字符串publicStringBuilderReplace(stringoldValue,stringnewValue);使用新字符串替換與oldValue匹配的字符串,它有3個重載。(5)Remove方法:從當前字符串中刪除字符publicStringBuilderRemove(intstartIndex,intlength);從指定索引位移除指定數(shù)量的字符,它沒有重載。(6)ToString方法:將StringBuilder轉(zhuǎn)換為String對象publicoverridestringToString();2.3可變字符串下面的例子演示了StringBuilder類元素的插入、替換和輸出。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceAddStringBuilder{classProgram{staticvoidMain(string[]args){StringBuildera=newStringBuilder("Hello,Welcome",150);//定義初始字符串"Hello,Welcome"a.Append(“C#”);Console.WriteLine(a
);//在a的末尾插入”C#”字符串并輸出a.AppendFormat(“!”);Console.WriteLine(a
);//在a的末尾插入格式字符串并輸出a.AppendLine(0,“thisisoneLine”);Console.WriteLine(a
);//在a的末尾插入新行及字符串a(chǎn).Insert(“0”,“A”);Console.WriteLine(a
);//在a指定的位置插入字符串a(chǎn).Replace(“A”,”B”);Console.WriteLine(a
);//將a指定字符串替換Console.readLine();}}}2.3可變字符串
在上面的示例中,第12行定義了一個StringBuilder對象a,第13到21行通過各種常用方法掩飾了類StringBuilder的使用。代碼編寫完成后,按“F5”鍵或者單擊工具欄中的“啟動調(diào)試”按鈕,顯示運行結(jié)果如下所示:Hello,WelcomeC#Hello,WelcomeC#!Hello,WelcomeC#!thisisoneLineAHello,WelcomeC#!thisisoneLineBHello,WelcomeC#!thisisoneLine2.4使用正則表達式2.4.1正則表達式概述正則表達式是指一個用來描述或者匹配一系列符合某個句法規(guī)則的字符串的單個字符串,,一個正則表達式,就是用某種模式去匹配一類字符串的一個公式。正則表達式的全面模式匹配表示法可以快速地分析大量的文本以找到特定的字符模式;還可以用于提取、編輯、替換或刪除文本子字符串或?qū)⑻崛〉淖址砑拥郊弦陨蓤蟾?。C#中正則表達式擁有一套語法規(guī)則,常見的語法包括字符匹配、重復(fù)匹配、字符定位、轉(zhuǎn)義匹配和其他高級語法(字符分組、字符替換和字符決策)。2.4使用正則表達式表2.2字符匹配語法表元字符 語法解釋[a-z] 匹配任何在連字符范圍內(nèi)的小寫字母[A-Z] 匹配任何在連字符范圍內(nèi)的大寫字母\d 匹配任何十進制阿拉伯數(shù)字(0~9),‘\d’匹配5,不匹配10,不匹配a\D 匹配任何非數(shù)字,‘\D’匹配a,不匹配5\w 匹配單字符類。與[a-zA-Z0-9_]相同W 匹配非單字符類。與[^a-zA-Z0-9_]相同\s 匹配任何空白字符,‘\d\s\d’匹配ab,不匹配abc\S 匹配任何非空白的字符,\S\S\S匹配a#b,不匹配ab. 匹配任意字符【…】 匹配括號中任意字符,【a-c】匹配a、b、c,不匹配d2.4使用正則表達式表2.3重復(fù)匹配語法表元字符 語法解釋{n} 匹配n次前導(dǎo)字符{n,} 匹配n次和n次以上前導(dǎo)字符{m,n} 匹配至少m次,至多n次的前導(dǎo)字符? 匹配0次或者1次的前導(dǎo)字符* 匹配0次或者多次的前導(dǎo)字符+ 匹配1次或者多次的前導(dǎo)字符2.4使用正則表達式表2.4字符定位語法表元字符 語法解釋^ 輸入文本的開頭$ 匹配n次和n次以上前導(dǎo)字符z 匹配前面模式結(jié)束位置Z 匹配前面模式結(jié)束位置(換行前)b 匹配字邊界的位置B 匹配不是字邊界的位置2.4使用正則表達式表2.5轉(zhuǎn)義匹配語法表元字符 語法解釋\n 匹配換行\(zhòng)r 匹配回車\t 匹配水平制表符\v 匹配垂直制表符\f 匹配換頁2.4使用正則表達式2.4.2使用正則表達式替換文本Regex類實現(xiàn)字符替換Regex
類表示不可變(只讀)的正則表達式。它還包含各種靜態(tài)方法,允許在不顯式創(chuàng)建其他類的實例的情況下使用其他正則表達式類。Regex類的常用方法如表2.6所示。2.4使用正則表達式表2.6Regex類的常用方法方法 說明
CompileToAssembly 已重載。編譯正則表達式,并將其保存到單個程序集的磁盤Equals
已重載。確定兩個Object實例是否相等。從Object繼承。Escape 通過替換為轉(zhuǎn)義碼來轉(zhuǎn)義最小的元字符集(/、*、+、?、|、{、[、(、)、^、$、.、#和空白)。GetGroupNames 返回正則表達式的捕獲組名數(shù)組。GetGroupNumbers 返回與數(shù)組中的組名相對應(yīng)的捕獲組號的數(shù)組。GetHashCode
用作特定類型的哈希函數(shù)。GetHashCode
適合在哈希算法和數(shù)據(jù)結(jié)構(gòu)(如哈希表)中使用。(從Object繼承。)用作特定類型的哈希函數(shù)。GetHashCode
適合在哈希算法和數(shù)據(jù)結(jié)構(gòu)(如哈希表)中使用。(從Object繼承。)獲取當前實例的
Type。(從Object繼承。)獲取與指定組號相對應(yīng)的組名。2.4使用正則表達式下面的例子演示了使用Regex類的Replace()方法實現(xiàn)字符替換。代碼如下所示。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Text.RegularExpressions;
namespaceTestMatch{classProgram{staticvoidMain(string[]args){Stringinput=“Hello,Welcome”;StringregExString=@“\b(l)\b”;Stringreplace=“L”;//實現(xiàn)替換Regexr=newRegex("regExString");Stringnewstring=r.Replace(input,replace);//輸出新的字符串
Console.WriteLine(“regExString”)Console.ReadLine();
}}}2.4使用正則表達式在上面的示例中,使用了正則表達式把搜索限制為單詞邊界,即在字符串“Hello,Welcome”中,用L代替l。代碼編寫完成后,按“F5”鍵或者單擊工具欄中的“啟動調(diào)試”按鈕,顯示運行結(jié)果如下所示:“HeLLo,WeLcome”2.4使用正則表達式2.4.3使用正則表達式搜索當前所有的文本編輯器都有一些搜索功能。通??梢源蜷_一個對話框,在其中的一個文本框中如要定位的字符串。比如在Windows操作系統(tǒng)中的記事本、Office系列中的文檔編輯器都有這種功能。如下圖2.1所示。這種搜索是最簡單的方式,這類問題用String類的String.Replace()方法或者Contains或者IndexOf()來搜索字符串對于簡單任務(wù)來說很好用,但有時候我們需要復(fù)雜的模式匹配能力,但String類型的方法并沒有提供。從一個String類中選擇重復(fù)的字是比較2.4使用正則表達式復(fù)雜的,此時使用語言就很適合。一般表達式語言是一種可以編寫搜索表達式的語言。在該語言中,可以把文檔中要搜索的文本、轉(zhuǎn)義序列和特定含義的其他字符組合在一起。
圖2-2“查找和替換“對話框2.4使用正則表達式2.4.3使用正則表達式搜索當前所有的文本編輯器都有一些搜索功能。通??梢源蜷_一個對話框,在其中的一個文本框中如要定位的字符串。比如在Windows操作系統(tǒng)中的記事本、Office系列中的文檔編輯器都有這種功能。如下圖2.1所示。
這種搜索是最簡單的方式,這類問題用String類的String.Replace()方法或者Contains或者IndexOf()來搜索字符串對于簡單任務(wù)來說很好用,但有時候我們需要復(fù)雜的模式匹配能力,但String類型的方法并沒有提供。從一個String類中選擇重復(fù)的字是比較。2.4使用正則表達式2.4.3使用正則表達式搜索當前所有的文本編輯器都有一些搜索功能。通??梢源蜷_一個對話框,在其中的一個文本框中如要定位的字符串。比如在Windows操作系統(tǒng)中的記事本、Office系列中的文檔編輯器都有這種功能。如下圖2.1所示。
這種搜索是最簡單的方式,這類問題用String類的String.Replace()方法或者Contains或者IndexOf()來搜索字符串對于簡單任務(wù)來說很好用,但有時候我們需要復(fù)雜的模式匹配能力,但String類型的方法并沒有提供。從一個String類中選擇重復(fù)的字是比較復(fù)雜的,此時使用語言就很適合。一般表達式語言是一種可以編寫搜索表達式的語言。在該語言中,可以把文檔中要搜索的文本、轉(zhuǎn)義序列和特定含義的其他字符組合在一起。2.4使用正則表達式下面的例子演示了使用Regex類的Match()方法返回Match類型的對象,以便找到輸入字符串中第一個匹配項,同時用Match類的Match.Success屬性來指示是否已經(jīng)找到匹配。代碼如下所示。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Text.RegularExpressions;
namespaceTestMatch{classProgram{staticvoidMain(string[]args)2.4使用正則表達式下面的例子演示了使用Regex類的Match()方法返回Match類型的對象,以便找到輸入字符串中第一個匹配項,同時用Match類的Match.Success屬性來指示是否已經(jīng)找到匹配。代碼如下所示。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Text.RegularExpressions;
namespaceTestMatch{classProgram{staticvoidMain(string[]args)2.4使用正則表達式
{Regexr=newRegex("y");//定義一個Regex對象實例Matchm=r.Match("marry");//在字符串中匹配
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年某某鎮(zhèn)政府工作報告
- 2025年度新能源儲能設(shè)施承包合同范本4篇
- 稅務(wù)局外立面2025年度改造設(shè)計合同2篇
- 二零二五版美容美發(fā)行業(yè)化妝品研發(fā)與銷售合同4篇
- 2025年度新能源車輛代理運輸合同(綠色轉(zhuǎn)型)4篇
- 2024年09月江蘇2024年浙商銀行蘇州分行校園招考筆試歷年參考題庫附帶答案詳解
- 2025年度旅游租車車輛保險及理賠合同4篇
- 2025年度蜜蜂養(yǎng)殖產(chǎn)業(yè)政策研究與咨詢合同3篇
- 2024年08月浙江/江蘇浙江泰隆商業(yè)銀行社會招考(826)筆試歷年參考題庫附帶答案詳解
- 2024年08月江蘇2024屆丹陽保得村鎮(zhèn)銀行秋季校園招考筆試歷年參考題庫附帶答案詳解
- 中國的世界遺產(chǎn)智慧樹知到期末考試答案2024年
- 2023年貴州省銅仁市中考數(shù)學(xué)真題試題含解析
- 世界衛(wèi)生組織生存質(zhì)量測量表(WHOQOL-BREF)
- 《葉圣陶先生二三事》第1第2課時示范公開課教學(xué)PPT課件【統(tǒng)編人教版七年級語文下冊】
- 某送電線路安全健康環(huán)境與文明施工監(jiān)理細則
- GB/T 28885-2012燃氣服務(wù)導(dǎo)則
- PEP-3心理教育量表-評估報告
- 控制性詳細規(guī)劃編制項目競爭性磋商招標文件評標辦法、采購需求和技術(shù)參數(shù)
- 《增值稅及附加稅費申報表(小規(guī)模納稅人適用)》 及其附列資料-江蘇稅務(wù)
- 中南民族大學(xué)中文成績單
- 危大工程安全管理措施方案
評論
0/150
提交評論