C#常用正則表達式回顧

来源:https://www.cnblogs.com/zhao123/archive/2019/07/16/11196486.html
-Advertisement-
Play Games

項目中有些時候需要用到正則表達式,但是自己對正則表達式不熟悉,每次學習完,過一段時間(長時間)不用,就又忘了,每次需要用到的時候都需要百度下,比較麻煩,這裡把C#中經常用到的正則表達式做下總結。 正則表達式常用的環境 爬蟲、網站數據驗證、日誌分析、字元串替換、獲取子字元串、文本處理、字元串處理等 正 ...


項目中有些時候需要用到正則表達式,但是自己對正則表達式不熟悉,每次學習完,過一段時間(長時間)不用,就又忘了,每次需要用到的時候都需要百度下,比較麻煩,這裡把C#中經常用到的正則表達式做下總結。

正則表達式常用的環境

爬蟲、網站數據驗證、日誌分析、字元串替換、獲取子字元串、文本處理、字元串處理等

正則基礎

1. []方括弧表示匹配可以匹配方括弧中的任意點單個字元,方括弧只允許匹配單個字元。
2. | 或表示兩項之間的一個選擇,它不能和方括弧使用,只能和小括弧使用。
3. ()小括弧表示一個子表達式的開始和結束位置
4. ^ 否符號,如果用在方括弧內,“^”表示不想要匹配的字元。
5. . 點字元:匹配除換行符 \n 之外的任何單字元。要匹配 . ,請使用 \. 。
6. 定位符:定位符使您能夠將正則表達式固定到行首或行尾,^ 和 $ 分別指字元串的開始與結束
7. 限定符:限定符用來指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配

  • * 表示匹配前面的子表達式0次或多次
  • ?表示匹配前面的子表達式0次或一次
  • + 表示匹配前面的子表達式至少匹配一次
  • {n} 表示匹配前面的子表達式n次
  • {n,m} 表示匹配前面的子表達式從n次到m次

8. 轉義字元

  • \d 匹配一個數字字元。等價於 [0-9]。
  • \D 匹配一個非數字字元。等價於 [^0-9]。
  • \s 匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
  • \S 匹配任何非空白字元。等價於 [^ \f\n\r\t\v]。
  • \w 匹配字母、數字、下劃線。等價於'[A-Za-z0-9_]'。
  • \W 匹配非字母、數字、下劃線。等價於 '[^A-Za-z0-9_]'。
  • \n 匹配一個換行符
  • \r 匹配一個回車符
  • \b 匹配一個單詞邊界,即字與空格間的位置。匹配單詞的開始或者結尾部分
  • \B 匹配非單詞邊界 匹配單詞的中間部分,例如:匹配:Chapter中的apt,/\Bapt/

9. 捕獲組:除(Expression)和(?<name>Expression)語法外,其它的(?...)語法都不是捕獲組。

    var str = "Is is the cost of of gasoline going up up";
    var patt1 = @"\b([a-z]+) \1\b";
    var matchDatas1 = Regex.Matches(str, patt1).Select(x => x.Value);
    Console.WriteLine(JsonConvert.SerializeObject(matchDatas1));//["of of","up up"]

捕獲組的順序是從左到右,從1開始,0代表整體,這裡的\1就是分組的第一個自匹配項,在Replace中可以用$1操作

    string a = @"(020)76544567";
    string b = @"\((\d{3})\)(\d{8})";
    var c = new Regex(b);
    string d = c.Replace(a, "$0-$1-$2");
    Console.WriteLine(d);//(020)76544567-020-76544567    

10.選擇
用圓括弧將所有選擇項括起來,相鄰的選擇項之間用|分割。用圓括弧會有一個副作用,使相關的匹配會被緩存,緩存的數據會占用記憶體,降低匹配效率。此時可用?:放在第一個選項前來消除這種副作用。
可以使用非捕獲元字元 ?:、?= 或 ?! 來重寫捕獲,忽略對相關匹配的保存。

  • (?:pattern)匹配pattern,但不捕獲匹配結果。'industr(?:y|ies)' 例如:匹配'industry'或'industries'。
  • (?=pattern)零寬度正向預查,不捕獲匹配結果。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”
  • (?!pattern)正向否定預查,不捕獲匹配結果。例如,“Windows(?!95|98|NT|2000)”不能匹配“Windows2000”中的“Windows”,但能匹配“Windows3.1”中的“Windows”

常用正則表達式

1. 非空字元串,適用於匹配單詞,關鍵字等 @"\S+"

2. html標簽 @"<[^>]+>"

  • 匹配帶連接的a標簽 @"<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>"
  • 匹配鏈接 "(href|src)\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))"
  • 匹配圖片 "<img(.*?)>"

3. Email地址:@"\w+@(\w+\.)+\w{2,3}";

4. 功能變數名稱:@"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?";

5. InternetURL:@"[a-zA-z]+://[^\s]*" 或 @"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$";

6. 手機號碼:@"^([1][3,4,5,6,7,8,9])\d{9}$";

7. 國內電話號碼:@"\d{3}-\d{8}|\d{4}-\d{7}";

8. 身份證:@"(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)";

9. 強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字元,長度在 6-10 之間):@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{6,10}$";

10. 簡單密碼:@"\w{6,10}";

11. 帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):@"^[a-zA-Z][a-zA-Z0-9_]{4,15}$";

12. 錢:@"^[0-9]+(.[0-9]+)?$";

13. QQ:@"[1-9][0-9]{4,}";

13. 郵政編碼:@"[1-9]\d{5}(?!\d)";

14. IP:@"^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$";

15. 數字: @"^\d+$";

16. 字母:@"^[a-zA-Z]+$";


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.函數 1.1 認識函數 定義一個事情或者是功能,等到需要的時候直接去用就好了.那麼這裡定義東西就是一個函數 函數:對代碼塊和功能的封裝和定義 函數的好處: 1. 減少代碼的重覆性 2. 代碼可讀性高 3. 將功能進行封裝(造工具) ​ 1.2 定義函數 ​ 結構: ​ def 關鍵字 ​ fun ...
  • new Form(){};這句話是說在記憶體中創建了Form的實例,並且調用了實例構造()以及初始化器{}; new還能得到記憶體的的地址,並且把這個地址交給一個變數。 var person=new{Name="a good man",Age=20};//匿名類型,new關鍵字創建了一個實例,然後讓va ...
  • 時間戳(timestamp): 通常是一個字元序列,唯一地標識某一刻的時間。數字時間戳技術是數字簽名技術一種變種的應用。定義: 時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。 作用: 防篡改 一般使用的方式就是把參 ...
  • 第一章 Unity人工智慧架構模型: 人工智慧: 感知(Sense) 思考(Think) 行為(Act) 迴圈 感知:AI和游戲的所有介面,比如敵人是否靠近 ==》思考:根據感知的結果 , 選擇行為、逃跑 ==》行為:執行行為 決策類游戲:《吃豆人》中的有限狀態機 潛行感知類游戲:《黃金眼》中如果自 ...
  • 第一章 1.1.2 C#2中的強類型集合 不再有代碼或者變了和屬性關聯,必須處處使用屬性,增強了一致性 ​ 1.2 排序和過濾 排序: ​ c#1 弱類型的比較功能:需要內部創建代碼來進行強轉,繁瑣。遇到強轉不成功時容易出錯。故實現介面時直接指定需要轉的類型。 ​ c#2 以不同方式進行排序: 通過 ...
  • 大二做B/S架構的項目使用了安衡電子秤CHS-D+R和一款掃碼槍,兩個設備的串口使用一樣,這款電子秤是相當的坑,沒有開發的api,無奈只能自己開發Activex了,在B/S架構中進行引用Activex的Guid能夠達到使用本地串口的最終目的. Activex中首先要進行安全簽名的設置 [ComImp ...
  • 大二的一個項目需要用到Activex技術將讀取到串口中的數據在後臺獲取到,並將串口的數據寫入資料庫,這個過程需要在後臺使用C#調用Activex控制項已經使用的方法,然後在前端通過JavaScript進行調用串口的數據進行賦值 <script type="text/javascript"> funct ...
  • 獲取網路文件,通過流保存文件。 //網路路徑文件 string pathUrl = "http://localhost:805/js/site.zip"; System.Net.HttpWebRequest request = null; System.Net.HttpWebResponse res ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...