01 re模塊

来源:https://www.cnblogs.com/xeoon/archive/2018/12/01/01-re-mo-kuai.html
-Advertisement-
Play Games

# re模塊## 單個匹配\w 匹配字母(包含中文)或數字或下劃線\W 匹配非字母(包含中文)或數字或下劃線```pythonprint(re.findall('\w', 'abc_ 123$%^')) # 返回 ['a', 'b', 'c', '_', '1', '2', '3']print(re... ...


re模塊

單個匹配

\w 匹配字母(包含中文)或數字或下劃線
\W 匹配非字母(包含中文)或數字或下劃線

print(re.findall('\w', 'abc_  123$%^'))  # 返回 ['a', 'b', 'c', '_', '1', '2', '3']
print(re.findall('\W', 'abc哈哈123_  123$%^'))  # 返回 [' ', ' ', '$', '%', '^']

\s 匹配任意的空白符
\S 匹配任意非空白符

print(re.findall('\s', '哈哈 \t \n'))  # 返回 [' ', '\t', ' ', '\n']
print(re.findall('\S', '哈哈 \t \n'))  # 返回 ['哈', '哈']

\d 匹配數字
\D 匹配非數字

print(re.findall('\d', 'xeon 哈哈 123'))  # 返回 ['1', '2', '3']
print(re.findall('\D', 'xeon 哈哈 123* \n \t + -'))  # 返回 ['x', 'e', 'o', 'n', ' ', '哈', '哈', ' ', '*', ' ', '\n', ' ', '\t']

\A 從字元串開頭匹配
^ 匹配字元串的開始

print(re.findall('\A太白', '太白 太白 123*'))  # 只匹配第一個,有責返回,無責返回[]
print(re.findall('^太白', '太白 太白 123*'))  # 只匹配第一個,有責返回,無責返回[]

$ 匹配字元串的結尾

print(re.findall('123$', 'xeon 哈哈 123'))  # 返回123

\n 匹配一個換行符
\t 匹配一個製表符

print(re.findall('\n', '** 太白 哈哈 \n123 \n456'))  # 返回 ['\n', '\n']
print(re.findall('\t', '*\t* 太白 哈哈 \t123 \n456'))  # 返回 ['\t', '\t']

重覆匹配

匹配任意字元,除了換行符(re.DOTALL 這個參數可以匹配\n)
找不到按一位一位找,找到了,從b位後開始找

print(re.findall('a.b', 'ab aab abb a*b a6b a b aaaab'))  # 返回 ['aab', 'abb', 'a*b', 'a6b', 'a b', 'aab']
print(re.findall('a.b', 'ab aab abb a\nb a\tb', re.DOTALL))  # 返回 ['aab', 'abb', 'a\nb', 'a\tb']

?匹配0個或者1個由左邊字元定義的片段 貪婪匹配

print(re.findall('a?b', 'aaaaab'))  # 返回 ['ab']
print(re.findall('a?b', 'ab aab abb a*b'))  # 返回 ['ab', 'ab', 'ab', 'b', 'b']

* 匹配0個或者多個左邊字元表達式。 滿足貪婪匹配 @@

print(re.findall('a*b', 'ab aab aaaaaaab abbbbb'))  # 返回 ['ab', 'aab', 'aaaaaaab', 'ab', 'b', 'b', 'b', 'b']

+ 匹配1個或者多個左邊字元表達式。 滿足貪婪匹配 @@

print(re.findall('a+b', 'ab aab aaab abbb'))  # 返回 ['ab', 'aab', 'aaab', 'ab']

{m,n} 匹配m個至n個左邊字元表達式。 滿足貪婪匹配 @@

print(re.findall('a{2,4}b', 'ab aab aaaab abbbb'))  # 返回 ['aab', 'aaaab']

.* 貪婪匹配 從頭到尾. 純貪模式一般不用

print(re.findall('a*b', 'ea*b ab aab aaaaaaaaab abbb'))  # 返回 ['b', 'ab', 'aab', 'aaaaaaaaab', 'ab', 'b', 'b']

.? 此時的?不是對左邊的字元進行0次或者1次的匹配 . 純貪 ? 作為限制 滿足我就取出 常用模式

print(re.findall('a.*?b', 'a*b ab aab aaaaaaaaab abbb'))  # 返回 ['a*b', 'ab', 'aab', 'aaaaaaaaab', 'ab']

[ ] 代表一個字元 # erw 任意選一個

print(re.findall('a[erw][erw]b', 'ab aab aeb arb arwb arewb'))  # 返回 ['arwb']
str1 = 'a1b a2b a3b aab aeb a9b'
str2 = 'a1b aTb a3b aAb aeb a_b ayb'
str3 = 'a1b aTb a3b a-b a%b a!b a&b'
print(re.findall('a[0-9]b', str1))  # ['a1b', 'a2b', 'a3b', 'a9b']
print(re.findall('a[a-z]b', str2))  # ['aeb', 'ayb']
print(re.findall('a[a-z,A-Z]b', str3))  # 返回 ['aTb']

分組

() 製造了一個模板(.*?)_sb

print(re.findall('(.*?)_sb', 'alex_sb wusir_sb 日天_sb'))  # 返回 ['alex', ' wusir', ' 日天']
print(re.findall('href="(.*?)"', '<a href="http://www.baidu.com">點擊</a>'))  # 取出網址並以列表顯示

| 匹配 左邊或者右邊

print(re.findall('alex|太白|wusir', 'alex太白wusiraleeeex太太白odlb'))  # 返回 ['alex', '太白', 'wusir', '太白']
print(re.findall('compan(ies|y)','Too many companies have gone bankrupt, and the next one is my company'))  # ['ies', 'y']

# 但是我想將 companies  company ?: 對分組進行一個應用,全部都取出來
print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next one is my company'))
返回 ['companies', 'company']

re模塊的操作方法

findall 找到全部

print(re.findall('a.b', 'abaabb'))  # ['aab']

search 相當於 in

print(re.search('sb|alex', 'alex sb sb barry 日天'))  # <_sre.SRE_Match object; span=(0, 4), match='alex'>
print(re.search('aaa', 'alex sb sb barry 日天'))  # <_sre.SRE_Match object; span=(0, 4), match='alex'>
print(re.search('sb|alex', ' 666 sb alex sb barry 日天').group())  # sb

match 匹配的就是開始

print(re.match('aaa', 'aaa sb sb barry 日天'))  # <_sre.SRE_Match object; span=(0, 3), match='aaa'>
print(re.match('aaa', 'aa sb sb barry 日天'))  # None
print(re.findall('^aaa', 'aa sb sb barry 日天'))  # []

分割 替換

split 分割 可按照任意分割符進行分割
s1 = 'alex wusir 日天 太白'
s1 = 'alex wusir,日天;太白|二狗'
print(s1.split())

對字元串按照不同分隔符進行分割
print(re.split(' |,|;|\|',s1))
sub 替換
print(re.sub('barry', '太白', 'barry是最好的講師,barry就是一個普通老師,請不要將barry當男神對待。'))
print(re.sub('(alex)( )(is)( )(sb)', r'\5\2\3\4\1', r'alex is sb'))

將字元串的第一個與最後一個單詞!互換位置
print(re.sub('([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)', r'\5\2\3\4\1', r'alex     is 1232 sb'))
print(re.findall('[a-zA-Z]+', 'alex1wusir3 12321'))

obj = re.compile('\d{2}')
print(obj.search('abc123eeee').group())
print(obj.findall('abc123eeee'))

ret = re.finditer('\d', 'ds3sy4784a')   #finditer返回一個存放匹配結果的迭代器
print(ret)  # <callable_iterator object at 0x10195f940>
print(next(ret).group())  #查看第一個結果 3
print(next(ret).group())  #查看第二個結果 4
print([i.group() for i in ret])  #查看剩餘的左右結果 ['7', '8', '4']

舉例

例子1:
s1 = "1-2(60+(-40.35/5)-(-43))"

1 匹配所有的整數  (pass)
print(re.findall('\d+', s1))  # ['1', '2', '60', '40', '35', '5', '4', '3']

2 匹配所有的數字(包含小數)
print(re.findall('\d+\.?\d*', s1))  # ['1', '2', '60', '40.35', '5', '4', '3']

3 匹配所有的數字
print(re.findall('-?\d+\.?\d*', s1))  # ['1', '-2', '60', '-40.35', '5', '-4', '3']

例子2:
s1 = ''' <p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/7459977.html" target="_blank">python基礎一</a></p> <p><a style="text-decoration: underline;" href="http://www.cnblogs.com/jin-xin/articles/7562422.html" target="_blank">python基礎二</a></p> '''

1.找到所有的p標簽
print(re.findall('<p>.*?</p>', s1))

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

-Advertisement-
Play Games
更多相關文章
  • 動態組件中用匯流排Bus的坑 在我們的項目總難免會遇到用動態組件,這裡就拿 "vue官方的例子" 為例,我們欲在組件中添加匯流排bus(其實官方推薦的vuex更好用,但是有時候我們只需要傳一個小狀態,不需要用vuex),首先要mian.js 中創建一個匯流排Bus(當然這裡一般要把Bus封裝一下放在一個單 ...
  • 本文文字內容均選自《大話設計模式》一書。 解釋:觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。 此模式又叫發佈-訂閱模式。 舉例:火車到站與乘客下車。 主題: 觀察者1: 觀察者2: 客戶端: ...
  • 在互聯網產品上線之後,產品和運營人員需要即時瞭解產品的使用情況,有多少用戶,用戶使用了哪些功能,停留時長,使用路徑。。。等。要回答這些問題,需要有數據,不能拍腦袋想當然。數據怎麼得到呢?埋點就是採集數據的重要途徑。 數據埋點不是新名詞,在電腦網站出來之後就有統計工具,站長們很熟悉的谷歌、百度統計等工 ...
  •   信息管理類應用系統離不開關係數據存儲,目前大家基本都使用的是傳統的資料庫如MySql、Postgres等。作者從事信息化建設十多年,個人認為傳統的資料庫存在以下的問題: 擴展問題:   系統數據的不斷增長是個繞不過去的坎,傳統資料庫的存儲結構一般 ...
  • 1:第一個Python程式 Python程式有兩種編寫⽅式: 1.1. 進入cmd控制台. 輸入python進入編輯模式. 這時候我們可以直接編寫python程式 win + R 輸入cmd進入命令行,輸入python 1.2. 也可以在.py⽂件中編寫python代碼. 通過python命令來執⾏ ...
  • Django 實現視圖的方法有兩種,一種是FBV(function base view)即基於函數的視圖,還一種高級的就是CBV(class base view),通過閱讀源碼你會發現它本質上還是基於FBV的。FBV的優點是用法和寫法都比較簡單適合剛開始學的同學使用,缺點就是不能用的面向對象的幾大特 ...
  • 正則表達式 正則表達式:一種字元串匹配的規則 字元組 字元 註意這三種的結果都表示匹配所有:[\d\D]、[\s\S]、[\w\W] 量詞 貪婪匹配 貪婪匹配:在滿足匹配時,匹配儘可能長的字元串,預設情況下,採用貪婪匹配 . *?的用法 re模塊 在python中用來提供正則表達式匹配的模塊就是re ...
  • 概述 Python處理PDF文件需要安裝相應的庫: 【PyPDF2】庫 使用場景 工作中可能會涉及處理pdf文件,PyPDF2就是這樣一個庫, 使用它可以輕鬆的處理 pdf 文件,它提供了 讀、寫、分割、合併、文件轉換 等多種操作。 安裝庫 "網站" 使用說明 PyPDF2 "官方文檔(docume ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...