C#知識點-17(正則表達式)

正則表達式

概念:正則表達式是用來進行文本處理的技術,是語言無關的,在幾乎所有語言中都有實現

元字符:

1、.:匹配除\n之外的任何單個字符。例如正則表達式“b.g”能匹配如下字符串:“big”、“bug”、“b g”,但是不匹配“buug”,“b..g”可以匹配“buug”。 ?

2、[ ] :字符組,匹配括號中的任何一個字符(范圍,字符集合)。例如正則表達式“b[aui]g”匹配bug、big和bag,但是不匹配beg、baug。可以在括號中使用連字符“-”來指定字符的區間來簡化表示,例如正則表達式[0-9]可以匹配任何數字字符,這樣正則表達式“a[0-9]c”等價于“a[0123456789]c”就可以匹配“a0c”、“a1c”、“a2c”等字符串;還可以制定多個區間,例如“[A-Za-z]”可以匹配任何大小寫字母,“[A-Za-z0-9]”可以匹配任何的大小寫字母或者數字。

3、| :將兩個匹配條件進行邏輯“或”運算。‘z|food’ 能匹配 “z” 或 “food”。‘(z|f)ood’ 則匹配 “zood” 或 “food”。

4、( ) :將 () 之間括起來的表達式定義為“組”(group),并且將匹配這個表達式的字符保存到一個臨時區域,這個元字符在字符串提取的時候非常有用。把一些字符表示為一個整體。改變優先級、定義提取組兩個作用。

限定符:限定前面正則表達式出現的次數

1、*:匹配0至多個在它之前的子表達式。等價于{0,}。例如正則表達式“zo*”(等同于z(o)*)能匹配 “z” 、“zo”以及 “zoo”;因此“.*”意味著能夠匹配任意字符串。"z(b|c)*"→zb、zbc、zcb、zccc、zbbbccc。"z(ab)*"能匹配z、zab、zabab(用括號改變優先級)。

2、+ :匹配前面的子表達式一次或多次,和*對比(0到多次)。等價于{1,}例如正則表達式9+匹配9、99、999等。 “zo+”能匹配 “zo”以及 “zoo” ,不能匹配"z"。

3、? :匹配前面的子表達式零次或一次。等價于:{0,1}例如,“do(es)?” 可以匹配 “do” 或 “does” 。【colou?r、favou?r】一般用來匹配“可選部分”。(終止貪婪模式)

4、{n} :匹配確定的 n 次。“zo{2}”→zoo。例如,“e{2}” 不能匹配“bed”中的“e”,但是能匹配“seed”中的兩個“e”。 //seeeed,不可以。

5、{n,} :至少匹配n次。例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配 “seeeeeeeed”中的所有“e”。?

6、{n,m} :最少匹配 n 次且最多匹配 m 次。“e{1,3}”將匹配“seeeeeeeed”中的前三個“e”。 {2,5}//bed,seed,seeed;beeeeed錯誤。

7、^(shift+6) :匹配一行的開始。例如正則表達式“^regex”能夠匹配字符串“regex我會用”的開始,但是不能匹配“我會用regex”。 ?

8、$(shift+4) :匹配行結束符。例如正則表達式“浮云$” 能夠匹配字符串“一切都是浮云”的末尾,但是不能匹配字符串“浮云呀” ?

正則簡寫表達式:

\d:代表一個數字,等同于[0-9] ? \\d ?→\d
\D:代表非數字,等同于[^0-9]
\s:代表換行符、Tab制表符等空白字符 ,(空格、回車、制表符)
\S:代表非空白字符(a0%$@@)
\w:匹配字母或數字或下劃線或漢字,即能組成單詞的字符。如果通過 ECMAScript 選項指定了符合 ECMAScript 的行為,則 \w 等效于 [a-zA-Z_0-9]。 ?^$()!@#$%^&*()
\W:非\w ,等同于[^\w] %
\b:單詞的邊界(一邊是單詞(\w),一邊不是單詞。(\W))。Hello ni hao,are you kidding? D-Day?

正則表達式(Regular Expression)的主要類:Regex
常用的3種情況:(C#語法)
判斷是否匹配:Regex.IsMatch(“字符串”,”正則表達式”);
字符串提取:Regex.Match(“字符串”,“要提取的字符串的正則表達式”);//只能提取一個(提取一次)
字符串提取(循環提取所有): Regex.Matches(),(可以提取所有匹配的字符串。)
字符串替換:Regex.Replace(“字符串”,”正則”,”替換內容”);
Regex.Split();

貪婪模式&&非貪婪模式

貪婪模式演示:(當提取多個超鏈接的時候)
“1111。11。111。111111。”
貪婪:.+。(默認為貪婪模式,盡可能的多匹配。)
非貪婪:.+?。(盡可能的少匹配,(1個。))
從文本提取出名字:
Match match = Regex.Match("大家好。我是S.H.E。我22歲了。我病了,嗚嗚。fffff", "我是(.+)。");//沒有加^$。
看結果。+、*的匹配默認是貪婪(greedy)的:盡可能多的匹配,直到“再貪婪一點兒”其后的匹配模式就沒法匹配為止。
在+、*后添加?就變成非貪婪模式(? 的另外一個用途):讓其后的匹配模式盡早的匹配。修改成"我是(.+?)。"
一般開發的時候不用刻意去修飾為非貪婪模式,只有遇到bug的時候發現是貪婪模式的問題再去解決。如果匹配的結果比自己預想的要多,那么一般都是貪婪模式的原因。

匹配組

正則表達式可以從一段文本中將所有符合匹配的內容都輸出出來。Match獲得的是匹配的第一個。Regex.Matches方法可以獲得所有的匹配項。

字符串替換

Regex.Replace,將字符串中匹配的內容替換為指定的內容

將所有連續的a替換為一個A(原需求:把連續的空格替換為一個空格):

string s = Regex.Replace(“你aaa好aa哈哈a你”, “a+", "A");

刪除所有連續的a,其實就是將連續的a替換為空字符串。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696206.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 窗口函數溫故知新

本文用于復習數據庫窗口函數,希望能夠溫故知新,也希望讀到這篇文章的有所收獲。 本文以:MySQL為例 參考文檔: https://www.begtut.com/mysql/mysql-window-functions.html 使用的樣例數據:https://www.begtut.com/m…

對象池模式-Object Pool Pattern

原文地址:https://jaune162.blog/design-pattern/object-pool-pattern/ 原文中可下載高清SVG矢量類圖 引言 對象池模式(Object Pool Pattern)是一種創建一組可重用對象的設計模式。它通過維護一個預分配的對象集合,避免了頻繁地創建和銷毀對象所帶來的性能開銷。在需要使用…

力扣_字符串11—實現前綴樹(字典樹、Trie樹)

題目 方法 對于每一個節點&#xff0c;初始化一個長度為26的數組&#xff0c;用來存儲對應字母子節點的地址對于每一個節點&#xff0c;初始化一個 b o o l bool bool 變量用來表示是否為葉子節點 代碼 class Trie { private:vector<Trie*> children vector<Trie…

LeetCode //C - 901. Online Stock Span

901. Online Stock Span Design an algorithm that collects daily price quotes for some stock and returns the span of that stock’s price for the current day. The span of the stock’s price in one day is the maximum number of consecutive days (starting from…

ESP8266智能家居(1)——開發環境的搭建

1.前期介紹 本次打算使用esp8266的開發板——NodeMCU&#xff0c;進行物聯網相關項目的學習。開發環境使用Arduino軟件。 NodeMCU實物圖為&#xff1a; 開發環境截圖為&#xff1a; 2.軟件下載 我使用的arduino版本為1.8.5&#xff0c;其安裝包如下&#xff1a; 【免費】ar…

vue3 #跨組件通信

//爺爺組件中 import { provide , ref } from vue const money ref (100) //定義數據 provide( money , money ) //提供數據給孫子組件 const changeMoney ( m:number ) > { //定義函數 if (money) { money.value money.value - m } } provide(&quo…

Python系列(19)—— 條件語句

一、條件語句的基本概念 條件語句&#xff0c;也稱為選擇語句&#xff0c;允許程序根據條件的結果來執行不同的代碼塊。Python中最常用的條件語句是if語句&#xff0c;其基本語法如下&#xff1a; if condition:# 當條件為真時執行的代碼塊如果條件為真&#xff08;即非零或非…

學習總結22

解題思路 簡單模擬。 代碼 #include <bits/stdc.h> using namespace std; long long g[2000000]; long long n; int main() {long long x,y,z,sum0,k0;scanf("%lld",&n);for(x1;x<n;x)scanf("%lld",&g[x]);for(x1;x<n;x){scanf(&qu…

GEE必須會教程—時間都去哪了(Date參數類型)

時間和空間是世界存在的兩種基本屬性&#xff0c;大部分的數據都有特有的通道存儲時間信息&#xff0c;用戶需要通過獲取數據存儲的信息&#xff0c;來判斷數據的可用性&#xff0c;以及數據在時間上發生的變化。在遙感上&#xff0c;空間數據集合中&#xff0c;時間信息顯得更…

django配置視圖并與模版進行數據交互

目錄 安裝django 創建一個django項目 項目結構 創建視圖層views.py 寫入視圖函數 創建對應視圖的路由 創建模版層 配置項目中的模版路徑 創建模版html文件 啟動項目 瀏覽器訪問結果 安裝django pip install django 創建一個django項目 這里最好用命令行完成&#xf…

SQL注入之DNSLog外帶注入

一、認識&#xff1a; 什么是dnslog呢&#xff1f; DNS就是域名解析服務&#xff0c;把一個域名轉換成對應的IP地址&#xff0c;轉換完成之后&#xff0c;DNS服務器就會有一個日志記錄本次轉換的時間、域名、域名對應的ip、請求方的一些信息&#xff0c;這個日志就叫DNSLog。…

漢諾塔問題—java詳解(附源碼)

來源及應用 相傳在古印度圣廟中&#xff0c;有一種被稱為漢諾塔(Hanoi)的游戲。該游戲是在一塊銅板裝置上&#xff0c;有三根桿(編號A、B、C)&#xff0c;在A桿自下而上、由大到小按順序放置64個金盤(如圖1)。游戲的目標&#xff1a;把A桿上的金盤全部移到C桿上&#xff0c;并仍…

【Nacos】構建云原生應用的動態服務發現、配置管理和服務管理平臺【企業級生產環境集群搭建應用】

基礎描述 一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集&#xff0c;幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。Nacos 幫助您更敏捷和容易地構建、交付和…

貓頭虎分享已解決Bug || Spring Error: Request method ‘POST‘ not supported

博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff01;《IDEA開發秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鴻蒙》 …

海思3559 yolov5 wk模型部署筆記

文章目錄 安裝3559工具鏈編譯opencv編譯項目總結 安裝3559工具鏈 將3559工具鏈copy到虛擬機上&#xff0c;并解壓得到安裝包 解壓&#xff1a; tar -zxvf aarch64-himix100-linux.tgz解壓后會得到安裝包文件夾&#xff1a; 安裝工具鏈&#xff1a; sudo ./aarch64-himix100…

代碼隨想錄算法訓練營第17天—二叉樹06 | ● *654.最大二叉樹 ● 617.合并二叉樹 ● 700.二叉搜索樹中的搜索 ● *98.驗證二叉搜索樹

*654.最大二叉樹 題目鏈接/文章講解&#xff1a;https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html 視頻講解&#xff1a;https://www.bilibili.com/video/BV1MG411G7ox 考點 前序遍歷構建二叉樹 我的思路 參考了力扣題目里的提示遞歸三要…

【大數據面試題】008 談一談 Flink資源如何配置

【大數據面試題】008 談一談 Flink 資源如何配置 并行度 Parallelism 概念作用Slot 概念作用如何設置TaskManager 任務管理器Flink submit 腳本 一步一個腳印&#xff0c;一天一道面試題 該文章有較多引用文章 https://zhuanlan.zhihu.com/p/572170629?utm_id0 并行度 Paralle…

Unity2023.1.19沒有PBR Graph?

Unity2023.1.19沒有PBR Graph? 關于Unity2023.1.19沒有PBR graph的說法,我沒看見管方給出的答案,百度則提到了Unity2020版之后Shader Graph的“全新更新”,之前也沒太注意版本的區別,以后項目盡量都留心一下。 之前文章說過,孿生智慧項目推薦使用URP渲染管線,以上的截…

安裝sklearn遇到ImportError: dlopen: cannot load any more object with static TLS

1.看https://blog.csdn.net/Go_ahead_forever/article/details/133755918 知不能 pip install sklearn&#xff0c;而是 pip install scikit-learn2.網上說調換import的順序就能解決。 但是我不知道調換哪個&#xff0c;索性重新開了anaconda環境&#xff0c;一個個安裝缺什么…

Stable Diffusion 繪畫入門教程(webui)-ControlNet(線稿約束)

上篇文章介紹了openpose&#xff0c;本篇文章介紹下線稿約束&#xff0c;關于線稿約束有好幾個處理器都屬于此類型&#xff0c;但是有一些區別。 包含&#xff1a; 1、Canny(硬邊緣&#xff09;&#xff1a;識別線條比較多比較細&#xff0c;一般用于更大程度得還原照片 2、ML…