9月11日學習內容整理:正則表達式,re模塊

一、正則表達式:正則是很大的一個知識點,不會僅僅是下面這些東西

1、概念:正則表達式就是一種對字符串匹配的規則,注意是只對字符串,正則表達式和python沒啥關系,

2、表達式:

(1)字符集:用中括號表示,例如[1-9],[012345],[a-z1-9],[A-z]

字符集代表的是一個字符的匹配規則,不需寫標點符號,可以多種規則連著寫,按從小到大的排列(ascii值,所以大寫A到小寫z也可以,但一般不這么寫)

(2)元字符

. ? ? 匹配除換行符以外的任意字符

\w ? ?匹配數字字母和下劃線的字符 ? ?大寫代表非數字字母下劃線的字符

\s  匹配空白符 ? ? ? ? ? ? ? ?大寫代表非空白符的字符

\d ? ?匹配數字   大寫代表非數字的字符

^ ? ? ?匹配字符串的開始,寫在開頭 ? ? [ ^ ] ?若寫在字符集當中就代表除字符集中以外所有的字符?

$ ? ? 匹配字符串的結尾,寫在最后

(3)量詞

* ?零次或多次

+ 一次或多次

?零次或一次

{1}只有1次

{2,10}2到10次

{4,}4次或多次

規則:盡量匹配多次;量詞只能操作前一個字符的次數。也就是說不會只對一個字符進行匹配就完了,而是將指定次數的匹配當作一次整體的匹配

(4)貪婪匹配:使用量詞匹配,每次盡量匹配多次

   ?非貪婪匹配:在量詞后加?,就是盡量匹配最少次

(5)分組:小括號;可以把一組字符當作一個整體,匹配這個整體也可以使用量詞使這個整體重復匹配;對于一條匹配的正則,只對需要的內容進行分組

(6)轉義符:\ 對于一些有特殊意義的字符用\可以表示本身,在python中用r轉義

補充:

1、回溯算法:例如<.*?> ?會一直匹配,當遇到>后不會停止會繼續匹配,待匹配到最后還是沒有>就會回頭回到之前的>

2、.*?字符 ? 取前面任意長度的字符,直到字符出現

二、re模塊

1、和正則的關系:python中的re模塊就是為正則服務的

2、方法

(1)findall(正則,要匹配的字符串) ?輸出的列表類型,元素為每一個匹配的字符串;若沒有匹配上,就輸出空列表

(2)search(正則,要匹配的字符串) 輸出的是一種對象并不顯示匹配的字符串,通常用group()來顯示匹配上的字符串

例如:

import re

ret = ?search(正則,字符串)

if ? ret ? : ? ? 若沒有匹配上,則輸出None

  print(ret.group() ) ? 注意這里group只能顯示第一個匹配上的字符串,若本身字符串很長有多個匹配項,但是group也只能顯示出第一個

(3)match() ?用法和search一樣,但是,不同的是match會自動在正則前面加上^,代表以什么開頭,所以group輸出的值只能是字符串開始匹配上的字符

?

(4)分割 split(正則[ab],字符串)按照正則的規則依次分割,例如先匹配a后分割得到的結果再按b分割,最后輸出的是列表

(5)替換 sub(正則,要替換的內容,字符串,次數) 按照正則匹配上的內容換成 ? 要替換的內容 ? 再輸出替換好的字符串。次數是指替換幾次,也就是替換前幾個

(6)sunb()會直接顯示輸出替換的次數

?

(7)obj = ?re.compile (正則) ? 將正則表達式編譯為正則表達式對象,這樣可以用來對多個字符串進行相同正則的匹配

(8)finditer(正則,字符串) ?會直接輸出一個迭代器,可循環取值,取值時要用group()

三、進階知識

1、findall優先級查詢:會優先顯示分組即小括號里的匹配內容,而自動不顯示括號外的匹配內容

解決辦法:(?:......... ? ? ?) ? 只要在小括號里的開頭加上問號和冒號,注意一定不要分開

2、split 優先級查詢:若在正則表達式兩邊加了括號,則分割時還會顯示出原本要匹配的內容,例如上一節中的(4)給[ab]加括號([ab]),這樣的話分割出來的內容也會有a和b

3、匹配標簽:在search方法中,在要選擇輸出的正則規則前面加上?P<名字>,然后把正則規則用小括號括起來

import re
ret=re.search('<\w+>(?P<name>\w+)<\w+>','<h1>hello<h1>')
print(ret.group('name'))
匹配標簽

?若遇到字符串有重復的內容使我們需要的,不能每一次都寫一個新的名字,只要在需要的正則位置兩邊加上括號,開頭寫?P=名字,而且括號里的正則也不需要留著

import re
ret=re.search('<(?P<name>\w+)>\w+<(?P=name)>','<h1>hello<h1>')
print(ret.group('name'))
匹配標簽2

?

轉載于:https://www.cnblogs.com/wanghl1011/articles/7505429.html

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

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

相關文章

rest_framework02:修改數據/校驗鉤子/read_only和write_only

修改數據 1.傳入數據&#xff0c;選中data&#xff0c;以及修改data book_ser BookSerializer(instancebook, datarequest.data) 2.校驗&#xff0c;通過則保存。 if book_ser.is_valid(): # 返回True 表示驗證通過book_ser.save() # 不是book.save() rest_framework…

MongoDB的安裝與使用

MongoDB是一款NoSql數據庫。NoSql數據庫叫非關系型數據庫&#xff0c;NoSql的全名Not only sql。是為了解決高并發、高可用、高可擴展&#xff0c;以及大數據存儲等一系列問題而產生的數據庫解決方案。NoSql&#xff0c;它不能替代關系型數據庫&#xff0c;只能作為關系型數據庫…

linux 基準測試_如何對Linux系統進行基準測試:3個開源基準測試工具

linux 基準測試Linux’s command-line utilities can do anything, including perform benchmarks – but using a dedicated benchmarking program is a simpler and more foolproof process. These utilities allow you to perform reproducible tests across different syst…

.NET 7 新增的 IParsable 接口介紹

.NET 7 是一個新版本的 .NET&#xff0c;它新增了一個名為 IParsable 的接口。這個接口可以幫助開發人員更容易地在代碼中解析字符串。IParsable 接口包含兩個方法&#xff1a;Parse 和 TryParse。Parse 方法用于將一個字符串解析為指定類型的值。如果解析失敗&#xff0c;則會…

CentOS 7安裝nginx+php+mysql環境

0x01 安裝php 1、首先得安裝第三方軟件庫 yum install epel-release 復制代碼2、安裝依賴包 yum install gcc gcc-c glibc libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-de…

spring+springMvc+struts的SSH框架整合

1.建立一個web項目 2.導入SSH框架所需jar包 3.配置web.xml文件 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xsi:sc…

聽說這個語言認知服務又出新功能了?

點擊上方藍字關注我們&#xff08;本文閱讀時間&#xff1a;7分鐘)語言是人類智能發展的基石。鑒于語言擁有普遍性&#xff0c;幾乎沒有特定的技術或 AI 技術得以顛覆整個社會。微軟的使命是賦能地球上的每個人和每個組織&#xff0c;幫助他們取得更多成就。立足于該使命&#…

強大的XML

2018-04-23 20:29:26 XML&#xff1a;Extensible Markup Language&#xff0c;也就是可擴展標記語言。XML和HTML格式是古老的標記通用語言SGML的衍生語言。 XML文件是可以用來作為配置文件的&#xff0c;相比于其他配置文件的規范&#xff0c;XML的好處在于通過自定義的標記&am…

rest_framework03:查詢所有/新增數據/刪除一個數據/封裝Response/序列化與反序列化

查詢所有 1.創建新clase和url&#xff0c;避免與查詢一個功能邏輯混亂。 2.增加manyTrue&#xff0c; book_serBookSerializer(books,manyTrue) urls.py: path(books/,views.BooksView.as_view()) views.py class BooksView(APIView):def get(self,request):response_msg …

如何對DevOps數據庫進行源代碼控制

提綱&#xff1a; 包括索引在內的數據庫模式需要進行源代碼控制諸如查詢表這類用于控制業務邏輯的數據需要進行源代碼控制開發人員需要一種能夠便捷地創建本地數據庫的方法共享數據庫的更新只能通過構建服務器完成 健壯的DevOps環境需要對系統的每個組件進行持續集成。但是&…

自定義異常最佳實踐_播放,自定義和組織媒體的最佳文章

自定義異常最佳實踐Computers today are used for much more than generating documents, writing and receiving email, and surfing the web. We also use them to listen to music, watch movies and TV shows, and to transfer media to and from mobile devices. 如今&…

CSS中的路徑裁剪樣式clip-path

前面的話 CSS借鑒了SVG裁剪的概念&#xff0c;設置了clip-path樣式&#xff0c;本文將詳細介紹路徑裁剪clip-path 概述 clip-path屬性可以防止部分元素通過定義的剪切區域來顯示&#xff0c;僅通過顯示的特殊區域。剪切區域是被URL定義的路徑代替行內或者外部svg&#xff0c;或…

socket編程學習筆記

socket編程&#xff1a; 1、網絡基礎知識 兩臺計算機通過網絡進行通信&#xff0c;首先兩臺計算機要有唯一的標識&#xff0c;即唯一的IP地址。其次他們要有共同的語言用來交流即協議。再者&#xff0c;每套主機要有相應的端口號。  TCP/IP協議&#xff1a;   --TCP/IP協議是…

rest_framework04:ModelSerializer/Serializer高級用法

ModelSerializer 1.減小序列化類代碼 2.不需要重寫update&#xff0c;create ser.py class BookModelSerializer(serializers.ModelSerializer):class Meta:modelBookfields__all__ #序列化全部字段# fields(name,price) # 序列化指定字段# exclude(name,) # 與fields 不能…

配置本地及網絡yum源(詳細步驟)

我們以centos6為范例演示 1、[rootCentos6 ~]# cd /etc/yum.repos.d/ [rootCentos6 yum.repos.d]# ls CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repoCentOS-Debuginfo.repo CentOS-Media.repo先羅列出相關文件 2、[rootCentos6 yum.repos.d]# vim CentOS-Base.rep…

macos mojave_如何修復macOS Mojave上的模糊字體(使用亞像素抗鋸齒)

macos mojaveApple’s macOS Mojave disables subpixel antialiasing, also known as font smoothing, by default. On a MacBook Air or a desktop Mac hooked up to a non-Retina display, upgrading will make your fonts look worse. 蘋果的macOS Mojave默認情況下禁用子像…

為什么我要寫博客

原因在這啦 一、我覺得分享是一種精神&#xff0c;分享是我的樂趣所在&#xff0c;不是說我覺得我講得一定是對的&#xff0c;我講得可能很多是不對的&#xff0c;但是我希望我講的東西是我人生的體驗和思考&#xff0c;是給很多人反思&#xff0c;也許給你一秒鐘、半秒鐘&…

一個變量命名神器:支持中文轉變量名

變量命名的規范&#xff0c;對于我們編程&#xff0c;大家都知道是非常重要的&#xff0c;上次給大家推薦過一個命名輔助工具《程序員還在為變量取名苦惱&#xff0c;那是因為你不知道&#xff0c;這個變量命名神器》&#xff0c;但大家一致反饋存在2個問題&#xff1a;1、網速…

rest_framework05:GenericAPIView用法/擴展類5個/子類9個/ViewSetMixin 自定義方法名字

GenericAPIView 1.視圖層類使用GenericAPIView繼承&#xff0c;能簡化類里的方法code。 2.簡化后的方法code格式基本通用&#xff0c;簡單修改即可應用到其他類。 一、class開始加入 queryset Book.objectsserializer_class BookModelSerializer 二、方法里獲取對象 a.查…

1.操作系統概述

2019獨角獸企業重金招聘Python工程師標準>>> 操作系統的發展過程 無操作系統的計算機系統單道批處理系統&#xff08;50年代&#xff0c;系統資源利用率低&#xff09;多道批處理系統&#xff08;60年代&#xff09;分時系統&#xff08;70年代&#xff09;實時系統…