正則表達式之括號

正則表達式(三)

  括號

?  分組

  量詞可以作用字符或者字符組后面作為限定出現次數,如果是限制多個字符出現次數或者限制一個表達式出現次數,需要使用括號()將多個字符或者表達式括起來,這樣便稱為分組。例如(ab)+表示“ab”字符串重復出現一次以上,ab+表示字符b重復出現一次以上。

  分組應用:匹配一個長度為15到18的數字字符串,使用正則表達式\d{15,18};匹配一個長度為15或18的數字字符串,使用正則表達式\d{15}(\d{13})?。

  多選結構

  多選結構的形式是(...|...),在括號內以豎線分隔開多個表達式,每個表達式被稱為多選分支,多選分支的數目是沒有限制的。匹配過程中,整個多選結構看做一個整體,只要其中一個多選分支能夠匹配,則整個多選結構匹配成功。反之,所有多選分支不能匹配則匹配失敗。

  繼分組應用中問題來說,匹配一個長度為15或者18的數字字符串,使用正則表達式\d{15}(\d{13})?可以實現,使用多選結構(\d{15}|\d{18})也可以輕松實現。

  多選結構應用:匹配月份,使用正則表達式(0?[1-9]|1[012]),匹配日,使用正則表達式(0?[1-9]|1[0-9]|2[0-9]|3[01])。

  分組是對字符串特性的抽象合并,多選結構是對字符串特性的具象羅列。

  引用分組

  分組可以保存每個分組的匹配文本,匹配完成以后,通過group(num)方法引用分組在匹配過程中捕獲的匹配文本。其中num表示對應括號的編號,括號分組的編號自左向右,由1開始計數。一般來說,正則表達式匹配完成以后,會返回一個結果對象,對結果對象調用group()方法,并傳入所需分組的編號,即可獲得所需分組的匹配文本內容。如python而言,re.search()返回一個MatchObject對象,判定MatchObject對象是否為None,可以驗證匹配是否成功;對MatchObject對象調用group()方法可以回去對象中匹配文本的內容。

  num = 1,2,3,...MatchObject.group(num)表示獲取對應括號分組編號匹配的內容。

  num = 0,MatchObject.group(0)表示獲取整個表達式匹配的內容。

  反向引用:在正則表達式內部引用之前捕獲分組匹配的文本,形式為\num,使用正則表達式([a-z])\1可以表示兩個連續重復的字母,其中num為1是指分組([a-z])的編號,\1表示對其匹配結果的引用。

  注意正則表達式:(\bcat\b)\s+\1,\1是對匹配文本cat的反向引用,但是\1表示匹配cat不含左右邊界的單詞,也會匹配cater,dedicate等單詞。

  命名分組

  分組可以通過括號編號來調用,但是括號多了容易混淆,因此采用命名分組,對不同分組采取不同的命名,在調用時也會簡單方便。python中命名分組的方式為(?P<name>...),例如對分組(\d{4})命名為(?P<year>\d{4}),調用時使用group(name),如group(year)獲取匹配文本內容。

  反向引用:使用了命名分組,在正則表達式中反向引用時,必須使用(?P=name)的記法。

  非捕獲分組

  前面提到了分組的多重用法,如普通分組、多選結構、引用分組,這些都是需要使用括號構成分組的,一旦構成分組,就會對分組匹配的文本信息進行保存。有一些匹配文本是我們不需要的,我們就可以設置分組為非捕獲分組,格式為(?:...),如(?:\d{4})。在引用分組和非捕獲分組交叉出現時,非捕獲分組不會占用分組編號。

  

轉載于:https://www.cnblogs.com/snow-lanuage/p/10536168.html

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

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

相關文章

免安裝Mysql在Mac中的神坑之Access denied for user 'root'@'localhost' (using password: YES)

眼看馬上夜深人靜了&#xff0c;研究了一天的問題也塵埃落定了。 廢話不多說 直接來干貨&#xff01; 大家都知道免安裝版本的Mysql, 在Mac中安裝完成&#xff08;如何安裝詳見Mac OS X 下 TAR.GZ 方式安裝 MySQL&#xff09;之后&#xff0c;在登錄時會遇到沒有訪問權限的問題…

nodejs函數

https://www.cnblogs.com/yourstars/p/6121262.html

[HNOI2009]夢幻布丁

題目描述 N個布丁擺成一行,進行M次操作.每次將某個顏色的布丁全部變成另一種顏色的,然后再詢問當前一共有多少段顏色.例如顏色分別為1,2,2,1的四個布丁一共有3段顏色. 第一行給出N,M表示布丁的個數和好友的操作次數. 第二行N個數A1,A2...An表示第i個布丁的顏色從第三行起有M行,…

用jquery實現html5的placeholder功能

版權聲明&#xff1a;本文為博主原創文章。未經博主同意不得轉載。 https://blog.csdn.net/QianShouYuZhiBo/article/details/28913501 html5的placeholder功能在表單中經經常使用到。它主要用來提示用戶輸入信息&#xff0c;當用戶點擊該輸入框之后&#xff0c;提示文字會自己…

mac環境下node.js和phonegap/cordova創建ios和android應用

mac環境下node.js和phonegap/cordova創建ios和android應用 一介布衣 2015-01-12 nodejs 6888 分享到&#xff1a;QQ空間新浪微博騰訊微博人人網微信引用百度百科的一段描述:PhoneGap是一個用基于HTML&#xff0c;CSS和JavaScript的&#xff0c;創建移動跨平臺移動應用程序的…

java中多線程 - 多線程中的基本方法

介紹一下線程中基本的方法使用 線程睡眠sleep() Thread.sleep(毫秒);我們可以通過sleep方法設置讓線程睡眠。可以看到sleep是個靜態方法 public static native void sleep(long var0) throws InterruptedException; try {System.out.println(new Date().getSeconds());Thread.s…

nodejs匿名函數

https://www.cnblogs.com/sharpest/p/8056232.html

Deployment descriptor

Deployment descriptor 是指一種配置文件用于工件部署到一些container/engine。 在Java Platform&#xff0c;Enterprise Edition中&#xff0c;部署描述符描述了應如何部署組件&#xff0c;模塊或應用程序&#xff08;如Web應用程序或企業應用程序&#xff09;。它指示部署工具…

cordova 一個將web應用程序封裝成app的框架

cordova 一個將web應用程序封裝成app的框架 cordova的詳細介紹請參考這個鏈接&#xff1a;http://www.zhoujingen.cn/blog/7034.html 我接下來主要將如何搭建。 1.首先你需要下載幾樣東西 1.jdk. 2.android_SDK. 2.安裝這兩個&#xff0c;并配置環境變量 這里jdk的環境變量配置…

windows linux 子系統折騰記

最近買了部新電腦&#xff0c;海爾n4105的一體機&#xff0c;好像叫s7。 放在房間里面&#xff0c;看看資料。因為性能孱弱&#xff0c;所以不敢安裝太強大的軟件&#xff0c;然后又有一顆折騰的心。所以嘗試了win10自帶的linux子系統。然后在應用商店搜索linux推薦debian 系統…

nodejs閉包

一、什么是閉包&#xff1f; 官方”的解釋是&#xff1a;閉包是一個擁有許多變量和綁定了這些變量的環境的表達式&#xff08;通常是一個函數&#xff09;&#xff0c;因而這些變量也是該表達式的一部分。 相信很少有人能直接看懂這句話&#xff0c;因為他描述的太學術。其實這…

《深入理解Java虛擬機》讀書筆記八

第九章 類加載及執行子系統的案例與實戰 Q&#xff1a;如果有10個WEB應用程序都是用Spring來進行組織管理的話&#xff0c;可以把Spring放到Common或Shared目錄下&#xff08;Tomcat5.0&#xff09;讓這些程序共享。Spring要對用戶程序的類進行管理&#xff0c;自然要能訪問到用…

一些非常有用的鏈接和工具

微信公眾平臺SDK Senparc.Weixin for C#&#xff0c;支持.NET Framework及.NET Core &#xff1a; https://github.com/JeffreySu/WeiXinMPSDK layui開發文檔地址&#xff1a;https://www.layui.com/doc/ .Net Core GitHub社區 &#xff1a; https://github.com/dotnetcore EF…

Activity Intent相關FLAG介紹

先首先簡單介紹下Task和Activity的關系 Task就像一個容器&#xff0c;而Activity就相當與填充這個容器的東西&#xff0c;第一個東西&#xff08;Activity&#xff09;則會處于最下面&#xff0c;最后添加的東西&#xff08;Activity&#xff09;則會在最上面。從Task中取出東西…

js的原型和原型鏈

構造函數創建對象&#xff1a; function Person() {} var person new Person(); person.name Kevin; console.log(person.name) // KevinPerson 就是一個構造函數&#xff0c;我們使用 new 創建了一個實例對象 person prototype 每個函數都有一個 prototype 屬性 每一個Ja…

二維數組

要求&#xff1a;求一個二維數組的最大子數組和 思路&#xff1a;對于這個題&#xff0c;我會最簡單的讀取&#xff0c;雖然在網上查到了代碼&#xff0c;但是查找最大子數組的循環我真的看不懂&#xff0c;也不是特別懂思路&#xff0c;所以在這不會寫思路 package 二維數組; …

資源

資源鏈接&#xff1a; 內存池TinySTLminiSTLcghSTL1. lishuhuakai 2. 轉載于:https://www.cnblogs.com/sunbines/p/9707483.html

Android判斷應用或Activity是否存在

一、根據包名判斷應用是否存在public boolean checkApplication(String packageName) { if (packageName null || "".equals(packageName)){ return false; } try { ApplicationInfo info getPackageManager().getApplicationInfo(packageName, PackageManager.GET…

vue ref

https://www.jianshu.com/p/623c8b009a85

033 Url中特殊字符的處理

在url跳轉頁面的時候&#xff0c;參數值中的#不見了&#xff0c;一直沒有處理&#xff0c;今天有空看了一下&#xff0c;后來發現后臺的過濾器之類的都沒有處理&#xff0c;就比較奇怪了&#xff0c;原來是特殊字符的問題。 一&#xff1a;Url中的特殊字符 1.說明 這里還是需要…