国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#正則表達(dá)式的使用

這篇具有很好參考價值的文章主要介紹了C#正則表達(dá)式的使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

C#正則表達(dá)式 System.Text.RegularExpressions.Regex

使用時需要引入命名空間 using System.Text.RegularExpressions;

如果不引用則寫成 System.Text.RegularExpressions.Regex
使用方法如下:

string str="測試=123456";
string result="";
result= System.Text.RegularExpressions.Regex.Replace(str, @"[^0-9]+", "");//匹配非數(shù)字字符,用空字符串代替

//print   123456

(1)@符號 在C#中""為轉(zhuǎn)義字符,@符號用于忽略轉(zhuǎn)義字符,如涉及到轉(zhuǎn)義字符或路徑

string testStr1="\\r\\n";
string testStr2=@"\r\n";
string path1= "D:\\新建文件夾\\新建文件.txt";
string path2 = @"D:\新建文件夾\新建文件.txt";

(2)基本語法字符

符號 含義
\d 0-9的數(shù)字
\D \d的補(bǔ)集,所有非數(shù)字的字符(同[^0-9])
\w 單詞字符,指大小寫字母、0-9數(shù)字、下劃線
\W \w的補(bǔ)集
\s 空白字符,包括換行符\n、回車符\r、制表符\t、垂直制表符\v、換頁符\f
\S \s的補(bǔ)集
. 除換行符\n以外的任意字符
[…] 匹配[]內(nèi)所列出的所有字符
[^…] 匹配非[]內(nèi)所列出的所有字符

舉例:

string context = "這段文字共2329個字";
int count = 0;
count = int.Parse(System.Text.RegularExpressions.Regex.Replace(context1, @"\D", ""));//其中@"\D"可用@"[^0-9]"代替
string i = "saft";
string m = "2134";
System.Text.RegularExpressions.Regex t = new System.Text.RegularExpressions.Regex(@"\D");//指定表達(dá)式
bool b=t.IsMatch(i);//與表達(dá)式是否匹配  true
b=t.IsMatch(m);//false

(3)定位字符 定位字符所代表的是一個虛的字符,代表一個位置

C#正則表達(dá)式的使用
舉例:

string n = "Live for nothing,die for something";
string m = "Live for nothing,die for some thing";
Regex r1 = new Regex(@"\bthing\b");
Console.WriteLine("r1 match count:" + r1.Matches(n).Count);//0  r1中的字符在n中出現(xiàn)的次數(shù)
Regex r2 = new Regex(@"thing\b");
Console.WriteLine("r2 match count:" + r2.Matches(n).Count);//2
Regex r3 = new Regex(@"\bthing\b");
 Console.WriteLine("r3 match count:" + r3.Matches(m).Count);//1

(4)重復(fù)描述字符

C#正則表達(dá)式的使用
舉例:

string x = "100";
Regex r = new Regex(@"^\d{1}[1-9]?\d{2}$");//同 @"^\+?[1-9]?\d{2}$"
int i = r.Matches(x).Count;//1

(5)擇一匹配 [0-9]也是屬于一種擇一匹配,但是只能匹配單個字符,符號(|)提供了更大的范圍,例如(ab|xy)表示匹配ab或xy,注意"|“與”()"是一個整體。

舉例:

//匹配[0,100.0]之間的數(shù)字,含小數(shù)點(diǎn)的數(shù)字小數(shù)點(diǎn)后字符不能缺省
string a = "100";
string b = "99.28";
string c = "100.02";
string d = "100.0";
Regex r = new Regex(@"^\+?((100(.0+)*)|[1-9]?[1-9](\.\d+)*)$");
int i = r.Matches(a).Count;//1
int j = r.Matches(b).Count;//1
int k = r.Matches(c).Count;//0
int l = r.Matches(d).Count;//1

(6)特殊字符匹配

舉例:


//  匹配\
string x = "\\";
Regex r1 = new Regex(@"^\\$");
int i = r1.Matches(x).Count;//1
Regex r2 = new Regex("^\\\\$");
int j = r2.Matches(x).Count;//1

//  匹配"
string y = "\"";
Regex r0 = new Regex("^\"$");
int k = r0.Matches(y).Count;//1
Regex r = new Regex(@"^""$");
int l = r.Matches(y).Count;//1 

(7)組與非捕獲組

舉例:


//正則表達(dá)式引擎會記憶“()”中匹配到的內(nèi)容,作為一個“組”,并且可以通過索引的方式進(jìn)行引用。表達(dá)式中的“\1”,用于反向引用表達(dá)式中出現(xiàn)的第一個組,即粗體標(biāo)識的第一個括號內(nèi)容,“\2”則依此類推。
string x = "Live for nothing,die for something";
string y = "Live for nothing,die for somebody";
Regex r = new Regex(@"^Live ([a-z]{3}) no([a-z]{5}),die \1 some\2$");
Console.WriteLine("x match count:" + r.Matches(x).Count);//1
Console.WriteLine("y match count:" + r.Matches(y).Count);//0

//獲取組中的內(nèi)容。注意,此處是Groups[1],因為Groups[0]是整個匹配的字符串,即整個變量x的內(nèi)容。
string x = "Live for nothing,die for something";
Regex r = new Regex(@"^Live for no([a-z]{5}),die for some\1$");
if (r.IsMatch(x))
{Console.WriteLine("group1 value:" + r.Match(x).Groups[1].Value);//輸出:thing}

//可根據(jù)組名進(jìn)行索引。使用以下格式為標(biāo)識一個組的名稱(?<groupname>…)。
string x = "Live for nothing,die for something";
Regex r = new Regex(@"^Live for no(?<g1>[a-z]{5}),die for some\1$");
if (r.IsMatch(x))
{Console.WriteLine("group1 value:" + r.Match(x).Groups["g1"].Value); }//輸出:thing

//刪除原字符串中重復(fù)出現(xiàn)的“nothing”。在表達(dá)式之外,使用“$1”來引用第一個組,下面則是通過組名來引用:
string x = "Live for nothing nothing";
Regex r = new Regex(@"([a-z]+) \1");
if (r.IsMatch(x))
{x = r.Replace(x, "$1");
    Console.WriteLine("var x:" + x);//輸出:Live for nothing}

string x = "Live for nothing nothing";
Regex r = new Regex(@"(?<g1>[a-z]+) \1");
if (r.IsMatch(x))
{x = r.Replace(x, "${g1}");
    Console.WriteLine("var x:" + x);//輸出:Live for nothing}

//在組前加上“?:”表示這是個“非捕獲組”,即引擎將不保存該組的內(nèi)容。
string x = "Live for nothing";
Regex r = new Regex(@"^Live for no(?:[a-z]{5})$");
if (r.IsMatch(x))
{Console.WriteLine("group1 value:" + r.Match(x).Groups[1].Value);//輸出:(空)} 

(8)貪婪與非貪婪

正則表達(dá)式的引擎是貪婪,只要模式允許將匹配盡可能多的字符,通過在“重復(fù)描述字符”(*,+)后面添加“?”,可以將匹配模式改為非貪婪。
舉例:


string x = "Live for nothing,die for something";
Regex r1 = new Regex(@".*thing");
if (r1.IsMatch(x))
{
	Console.WriteLine("match:" + r1.Match(x).Value);//輸出:Live for nothing,die for something}
	Regex r2 = new Regex(@".*?thing");
	if (r2.IsMatch(x))
	{
		Console.WriteLine("match:" + r2.Match(x).Value); //輸出:Live for nothing}
	 }
} 

(9)回溯與非回溯

使用“(?>…)”方式進(jìn)行非回溯聲明,由于正則表達(dá)式引擎的貪婪特性,導(dǎo)致它在某些情況下進(jìn)行回溯已獲得匹配。
舉例:


string x = "Live for nothing,die for something";
Regex r1 = new Regex(@".*thing,");
if (r1.IsMatch(x))
{
	Console.WriteLine("match:" + r1.Match(x).Value); //輸出:Live for nothing, }
	Regex r2 = new Regex(@"(?>.*)thing,");
	if (r2.IsMatch(x))//不匹配
	{
		Console.WriteLine("match:" + r2.Match(x).Value);
	}
//在r1中,“.*”由于其貪婪特性,將一直匹配到字符串的最后,隨后匹配“thing”,但在匹配“,”時失敗,此時引擎將回溯,并在“thing,”處匹配成功。在r2中,由于強(qiáng)制非回溯,所以整個表達(dá)式匹配失敗。
} 

(10)正向預(yù)搜索、反向預(yù)搜索

正向預(yù)搜索聲明格式:正聲明 “(?=…)”,負(fù)聲明 “(?!..)” ,聲明本身不作為最終匹配結(jié)果的一部分。
舉例


string x = "1024 used 2048 free";
Regex r1 = new Regex(@"\d{4}(?= used)");
if (r1.Matches(x).Count == 1)
{
	Console.WriteLine("r1 match:" + r1.Match(x).Value);//輸出:1024}
	Regex r2 = new Regex(@"\d{4}(?! used)");
	if (r2.Matches(x).Count == 1)
	{
		Console.WriteLine("r2 match:" + r2.Match(x).Value); //輸出:2048}
	}
//r1中的正聲明表示必須保證在四位數(shù)字的后面必須緊跟著“ used”,r2中的負(fù)聲明表示四位數(shù)字之后不能跟有“ used”。
} 

反向預(yù)搜索聲明格式:正聲明“(?<=)”,負(fù)聲明“(?<!)”,聲明本身不作為最終匹配結(jié)果的一部分。
舉例:


string x = "used:1024 free:2048";
Regex r1 = new Regex(@"(?<=used:)\d{4}");
if (r1.Matches(x).Count == 1)
{
	Console.WriteLine("r1 match:" + r1.Match(x).Value);//輸出:1024}
	Regex r2 = new Regex(@"(?<!used:)\d{4}");
	if (r2.Matches(x).Count == 1)
	{
		Console.WriteLine("r2 match:" + r2.Match(x).Value);//輸出:2048}
	}
//r1中的反向正聲明表示在4位數(shù)字之前必須緊跟著“used:”,r2中的反向負(fù)聲明表示在4位數(shù)字之前必須緊跟著除“used:”之外的字符串。     

(11)十六進(jìn)制字符范圍

正則表達(dá)式中,可以使用 “\xXX” 和 “\uXXXX” 表示一個字符(“X” 表示一個十六進(jìn)制數(shù))形式字符范圍:
\xXX 編號在 0到255 范圍的字符,比如:空格可以使用 “\x20” 表示。
\uXXXX 任何字符可以使用 “\u” 再加上其編號的4位十六進(jìn)制數(shù)表示,比如:漢字可以使用“[\u4e00-\u9fa5]”表示。

(12)值域完備匹配特殊考慮

對[0,100]的比較完備的匹配需要特殊考慮的地方包括
*00合法,00.合法,00.00合法,001.100合法
*空字符串不合法,僅小數(shù)點(diǎn)不合法,大于100不合法
*數(shù)值是可帶后綴的,如“1.07f”表示該值為一個float類型(未考慮)

Regex r = new Regex(@"^\+?0*(?:100(\.0*)?|(\d{0,2}(?=\.\d)|\d{1,2}(?=($|\.$)))(\.\d*)?)$");
1

(13)精確匹配困難

有些需求要做到精確匹配比較困難,例如:日期、Url、Email地址等,其中一些你甚至需要研究一些專門的文檔寫出精確完備的表達(dá)式,對于這種情況,只能退而求其次,保證比較精確的匹配。例如對于日期,可以基于應(yīng)用系統(tǒng)的實(shí)際情況考慮一段較短的時間,或者對于像Email的匹配,可以只考慮最常見的形式。文章來源地址http://www.zghlxwxcb.cn/news/detail-475264.html

到了這里,關(guān)于C#正則表達(dá)式的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C# 正則表達(dá)式30分鐘入門教程到放棄

    最近用到了C#的Regex類,所以又復(fù)習(xí)了一遍C#的正則表達(dá)式,發(fā)現(xiàn)還是和其他語言或者說以前的學(xué)習(xí)有很多不同以及提高之處,所以寫這篇文章,用來給后來人一個系統(tǒng)性的教程或者引導(dǎo)。 字符是計算機(jī)軟件處理文字時最基本的單位,可能是字母,數(shù)字,標(biāo)點(diǎn)符號,空格,換行

    2024年02月15日
    瀏覽(25)
  • C#用正則表達(dá)式獲取字符串中漢字的數(shù)量

    C#用正則表達(dá)式獲取字符串中漢字的數(shù)量

    目錄 一、關(guān)于字符串和判斷其組成常識 二、用正則表達(dá)式獲取字符串中漢字的數(shù)量 1.字符是否為漢字的正則表達(dá)式 2.實(shí)例 3.生成結(jié)果 三、相關(guān)知識點(diǎn) 1.Regex.IsMatch 方法? ????????字符串中可以包括數(shù)字、字母、漢字或者其他字符。使用Char類型的IsDigit靜態(tài)方法可以判斷字

    2024年01月17日
    瀏覽(25)
  • C#判斷字符串中有沒有字母,正則表達(dá)式、IsLetter

    要判斷字符串中是否包含字母,可以使用正則表達(dá)式或者循環(huán)遍歷字符串的方式。 方法一:使用正則表達(dá)式 上述正則表達(dá)式 [a-zA-Z] 表示匹配任意一個字母(不區(qū)分大小寫), IsMatch 方法返回一個布爾值,表示是否匹配成功。 方法二:使用循環(huán)遍歷字符串 使用 char.IsLetter 方

    2024年02月11日
    瀏覽(21)
  • C#正則表達(dá)式性能優(yōu)化:[0-9] vs. \d,輕松提升匹配效率

    C#正則表達(dá)式性能優(yōu)化:[0-9] vs. \d,輕松提升匹配效率

    ? 概述: 在C#中,正則表達(dá)式`d`相對于`[0-9]`可能效率稍低,因為`d`包含更廣泛的Unicode數(shù)字字符。為提高性能,可使用`[0-9]`并結(jié)合編譯優(yōu)化。以下示例演示性能測試及優(yōu)化,適用于提高正則表達(dá)式匹配效率的場景。 在C#中,正則表達(dá)式 d 涵蓋更廣泛的 Unicode 數(shù)字字符范圍,

    2024年04月11日
    瀏覽(100)
  • 利用正則表達(dá)式進(jìn)行爬取數(shù)據(jù)以及正則表達(dá)式的一些使用方法

    Pattern:表示正則表達(dá)式 Matcher:文本匹配器,作用按照正則表達(dá)式的規(guī)則去讀取字符串,從頭開始讀取。 在大串中去找符合匹配規(guī)則的子串。 代碼示例: 需求: 把連接:https://m.sengzan.com/jiaoyu/29104.html?ivk sa=1025883i中所有的身份證號碼都爬取出來。 代碼示例: 需求: 把下面文

    2024年02月09日
    瀏覽(28)
  • 正則表達(dá)式使用匯總

    正則表達(dá)式使用匯總

    正則表達(dá)式是由一些具有特殊含義的字符組成的字符串,多用于查找、替換符合規(guī)則的字符串。在表單驗證、Url映射等處都會經(jīng)常用到。 平時可以使用正則表達(dá)式的在線測試工具練習(xí)和測試:正則表達(dá)式在線工具 我們在寫用戶注冊表單時,只允許用戶名包含字符、數(shù)字、下

    2024年02月15日
    瀏覽(19)
  • 正則表達(dá)式基本使用

    正則表達(dá)式基本使用

    如果要想靈活的運(yùn)用正則表達(dá)式,必須了解其中各種元字符的功能,元字符從功能上大致分為: 限定符 選擇匹配符 分組組合和反向引用符 特殊字符 字符匹配符 定位符 \\\\ 符號說明:在使用正則表達(dá)式去檢索某些特殊字符的時候,需要用到轉(zhuǎn)義符號,否則檢索不到結(jié)果,甚至

    2024年02月07日
    瀏覽(21)
  • Swfit 使用正則表達(dá)式

    Swfit 使用正則表達(dá)式

    Swift 中可以通過多種方式進(jìn)行正則使用和匹配。每一種情況的應(yīng)用場景都不一樣,可選擇一種適合自己的。 Tip:使用 Raw String 定義正則表達(dá)式,可以減少使用轉(zhuǎn)義符號 普通字符串正則:let pattern = “\\\\d{3,11}” 擴(kuò)展分隔符正則:let pattern = #“d{3,11}”# 通過 NSpredicate 匹配正則

    2023年04月22日
    瀏覽(23)
  • JavaScript使用正則表達(dá)式

    JavaScript使用正則表達(dá)式

    正則表達(dá)式(RegExp)也稱規(guī)則表達(dá)式(regular expression),是非常強(qiáng)大的字符串操作工具,語法格式為一組特殊字符構(gòu)成的匹配模式,用來匹配字符串。ECMAScript 3以Perl為基礎(chǔ)規(guī)范JavaScript正則表達(dá)式,實(shí)現(xiàn)Perl 5正則表達(dá)式的子集。JavaScript通過內(nèi)置RegExp類型支持正則表達(dá)式,String和Re

    2024年02月05日
    瀏覽(20)
  • 04 - 慎重使用正則表達(dá)式

    04 - 慎重使用正則表達(dá)式

    在講 String 對象優(yōu)化時,提到了 Split() 方法,該方法使用的正則表達(dá)式可能引起回溯問題,今天就來深入了解下,這究竟是怎么回事? 開始之前,我們先來看一個案例,可以幫助你更好地理解內(nèi)容。 在一次小型項目開發(fā)中,我遇到過這樣一個問題。為了宣傳新品,我們開發(fā)了

    2024年02月15日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包