023re模塊(正則)

来源:https://www.cnblogs.com/-nbloser/archive/2018/01/13/8278191.html
-Advertisement-
Play Games

之前我剛學的python知識點,沒有題目進行熟悉,後面的知識點會有練習題,並且慢慢補充。看到很多都是很簡單的練習,碰到複雜、需要運用的再補充吧#字元串中使用到正則表達式 #字元串裡面使用的是完全匹配 ##引入正則:模糊匹配#引入例子 ##元字元(11個) . 通配符 ^尖角符(頭) $(尾) * + ...


之前我剛學的python知識點,沒有題目進行熟悉,後面的知識點會有練習題,並且慢慢補充。
看到很多都是很簡單的練習,碰到複雜、需要運用的再補充吧
#字元串中使用到正則表達式

s='hello  world'
print(s.find('ll'))
ret=s.replace('ll','aiq')
print(ret)
print(s.split('o'))

#字元串裡面使用的是完全匹配


##引入正則:模糊匹配
#引入例子

import  re
ret=re.findall('w\w{2}l','hello  world',)
print(ret)   # ['worl']

 

##元字元(11個)   . 通配符  ^尖角符(頭)   $(尾)    *  +  { }             [ ]   \   ( )   |  
#.通配符

ret=re.findall('w..l','hello  world',)
print(ret)   # ['worl']

.表示任何東西,但一個點只能表示一位

#^ 尖角符

ret=re.findall('^w..l','hello world',)
print(ret)      # []

^ 只是在開頭匹配,world在開頭才能匹配

#$

ret=re.findall('w..ld$','hello  world',)
print(ret)            #  ['world']

$ 只是在末尾匹配

#*

ret=re.findall('xia.*aiq','xiawlgakwjegkawaiqweagkxiadajglagjgaaiqlskajweg')
print(ret)        # ['xiawlgakwjegkawaiqweagkxiadajglagjgaaiq']

* 表示重覆前面多個,包括0個,比如這裡是重覆多個‘.’
在例如:重覆多個a

ret=re.findall('ba*','uwefwoiafbaaaaaaaaaa',)
print(ret)      #  ['xiawlgakwjegkawaiqweagkxiadajglagjgaaiq']

 

#+

ret=re.findall('a+b','aaaaabhweogna')
print(ret)     #  ['aaaaab']

+表示一個以上

#?

ret=re.findall('a?b','aaaaabhweognabawegb')
print(ret)    # ['ab','ab','b']

?表示0或者1個

 # { }  

ret=re.findall('a{5}b','aaaaabjaweogldksgajaaab')
print(ret)      #  ['aaaaab']
# {5}  表示固定的有5個
ret=re.findall('a{1,5}b','aaaaabjaweogldksgajaaab')
print(ret)     # ['aaaaab','aaab']
# {1,5} 表示1~5次的都可以

 

 ##.  ^   $  *  +    ?   { }     推薦使用 *  +  ?

 ##後面四個更常用
#[ ] 字元集:取消元字元的特殊功能(\    ^   -)

ret=re.findall('a[c,d]iq','aeawadiqawe',)
print(ret)           # ['adiq']

ret=re.findall('[a-z]','aiq')
print(ret)          # ['a','i','q']

ret=re.findall('[.*]','aiq')     # .  *  都沒有意義了
print(ret)            #  []

# 字元集裡面加^
ret=re.findall('[^t]','wjrttttt')
print(ret)                       #  ['w','j','r']
ret=re.findall('[^t,j]','wjrttttt')      #這裡是出了't  ,   j'的其他字元
print(ret)                       #  ['w','r']

 

#  \ 特殊字元被去除特殊功能,普通字元被加上特殊功能

print(re.findall('\d{11}','aweoigw12354616579  12221845651'))         # ['12354616579']
print(re.findall(r'I\b','Iloveq.'))    #  ['I'] \b表示特殊字元

print(re.search('aiq','awekgwaeiaiqawefweaiq',))   # <_sre.SRE_Matchobject;span=(9,12),match='aiq'>

findall找字元串中全部符合的,返回一個列表
search找到第一個結果,返回一個不知道什麼類型的東西。使用.group方法可以返回找到的字元串
沒有找到不能調用.group方法

# \\ 找\

ret=re.findall('\\\\','abc\de')
print(ret)            # ['\\']
ret=re.findall(r'\\','abc\de')
print(ret)            # ['\\']

\b在python解釋器有特殊意義,加了r過後,python解釋器就不會解釋這個了

 #()分組

print(re.search('(as)+','sdjasasasaswefkajasasafw').group())#asasasas

ret=re.search('(?P<name>\w{2})/(?P<age>\d{2})','xq/32')     # 命名分組 <?P<name>
print(ret.group())                   #xq/32
print(ret.group('name'))           #xq
print(ret.group('age'))              #32

# | 管道符 代表或

print(re.search('(as)|3','as3').group())          #  as

ret=re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt456/qqq')     # ?P<id> 這裡是自己定義一個名字
print(ret.group())           # 456/qqq
print(ret.group('id'))       # 456/qqq
print(ret.group('name'))       #  qqq

使用findall方法得到的結果   [('xq', '32')]

 

 

################################################################
正則表達式的方法
1、findall():匹配的結果返回到了一個列表裡面
2、search():返回匹配到的第一個對象,可以調用group方法返回結果
3、match():只在字元開始匹配,和^號效果一樣,但是 返回對象
4、split():先按j分,然後在把分開的部分按s分

ret=re.split('[j,s]','djksal')               #  ******
print(ret)                                                          #  ['d','k','al']

5、sub():代替

ret=re.sub('x..ui','aiq','xijuialwewejgaiq')
print(ret)   #  aiqalwewejgaiq

6、compile():編譯了一個規則,通過規則對象

k=re.compile('\.com') 
ret=k.findall('afaewlj.comawelgkj')
print(ret)                 #  ['.com']

7、finditer():得到一個可迭代對象

ret=re.finditer('\d','sweg273932hk2k3jt23jk')
print(next(ret).group())

#看一本書上的貪婪性匹配演算法和懶惰性匹配演算法
上面都是貪婪的
#懶惰性匹配演算法

result=re.findall('<.+>','aiq<book><title>python</title><author>jiang<author></book>ai')
print(result)   # 貪婪性['<book><title>python</title><author>jiang<author></book>']
result=re.findall('<.+?>','aiq<book><title>python</title><author>jiang<author></book>ai')
print(result)   # 懶惰性 ['<book>',  '<title>',  '</title>',  '<author>',  '<author>',  '</book>']

感覺就是後面加了個問號,書上的例子都是這樣。沒錯,就是多了個?

 

 ################################################################
練習:
1、查找字元串中的6位數

result=re.findall('\d{6}','hold  on  16574 153486 46514 56ef5 sa5fef 486456')
print(result)     # ['153486','486456']

2、中國電話號碼(0751-6228666,021-62232333,區號2-3位,後面號碼6-8位)

result=re.findall('0\d{2,3}-\d{6,8}','電話號碼:0750-6225680,姓名:qq')
print(result)

3、題目:寫出正則表達式,從一個字元串中提取鏈接地址。比如
"IT面試題博客中包含很多  <a href=http://hi.baidu.com/mianshiti/blog/category/微軟面試題> 微軟面試題 </a> "
則需要提取的地址為 " http://hi.baidu.com/mianshiti/blog/category/微軟面試題 "

 1 import  re
 2 content="IT面試題博客中包含很多<ahref=http://hi.baidu.com/mianshiti/blog/category/微軟面試題>微軟面試題</a>"
 3 #result=re.search('http(s?)://(\w+(.\w+)*/(\w*)?)+',content).group()
 4 #result1=re.findall('(http(s?)://(\w+(.\w+)*/(\w*)?)+)',content)
 5 result=re.search('http(s?)://(\w+(.\w+)*/(\w*)?)+',content).group()
 6 print(result)
 7 # 標準答案  '<a(?: [^>]*)+href=([^>]*)(?: [^>]*)*>'         # 這個我沒有看明白是什麼意思
 8 #(http(s?)://(\w+(.\w+)*/(\w*)?)+)這樣使用findall的是[('http://hi.baidu.com/mianshiti/blog/category/微軟面試題','','hi.baidu.com/mianshiti/blog/category/微軟面試題','/category','微軟面試題')]
 9 #應該是找到全部符合的,然後找小的符合的。調用search就是我想要的
10 #如果是http(s?)://(\w+(.\w+)*/(\w*)?)+這樣,就不是我想要的,可能()是分組的問題導致的
View Code

4、題目:驗證電子郵箱地址

1 import  re
2 x=input('輸入郵箱地址:')
3 result=re.search('^(\w)+(\.\w)*(-\w)*(_\w)*@\w+((\.\w+)+)$',x).group()
4 print(result)
5 # 答案的正則是‘^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$'   ,我做的是加上答案後想了一下加的
View Code

 

 作業:
計算器
思路,先算最裡面括弧的內容,裡面可能出現加減乘除和冪運算(做成方法運算),然後結果代替原來的,迴圈。

 

re.search('\([^()]+\)','((3+6)*3)')     # 取最裡面的括弧

1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))
難度加深   2*(-15)-(-6)/(-2)  的這類
太多的東西解決不了,後期再補上,很多東西沒有學,先學其他,做好總結再說

 


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

-Advertisement-
Play Games
更多相關文章
  • 1.javaScript的基本結構:<script type="text/Javascript"> js語句 </script> 2..嵌入網頁的3種方法 1.在<script>標簽里直接寫 2.使用外部js文件,<script>標簽的src屬性,導入文件 3.直接在html里 列如 <input ...
  • 小點心,顧名思義,開箱即食,拿來即用。彈窗就無需多說了,幾乎所有存在交互的頁面都會用到,一個頁面上甚至會有 N 多個彈窗。彈彈彈,彈出魚尾紋。如果從面向對象的角度去看,把彈窗看成一個類想必是極好的,與之綁定的DOM塊是它的屬性,打開和關閉是它的方法,而且這樣可以實現彈窗樣式和邏輯的分離。 ...
  • 在做宣傳品發放系統時,需求要把資料庫查詢的記錄生成表單並轉存excel文件。 在轉存的EXCEL文件中文顯示亂碼,表格和其他字元正常,檢查後發現是創建EXCEL文件打開模式不對 之前: myfile = fs.CreateTextFile(filename,true) 之後: myfile = fs ...
  • 前言 在《javascript 之執行環境-08》文中說到,當JavaScript代碼執行一段可執行代碼時,會創建對應的執行上下文(execution context)。對於每個執行上下文,都有三個重要屬性: 變數對象(Variable object,VO) 作用域鏈(Scope chain) th ...
  • 原因 今天在使用element ui時,el input組件監聽不了回車事件,如下代碼沒有想要的效果: 原因應該是element ui自身封裝了一層input標簽之後影響了事件的監聽,在element ui里有很多因為自身封裝了幾層標簽導致事件和樣式無法按想要的效果呈現,遇到後可以在網頁中查看dom ...
  • 12、浮動 特點:將當前元素脫離文檔流 float: left 即左浮動 float: right 即右浮動 註:*父與子元素,設置子元素浮動不能超出父元素的範圍 *多個元素均設置為浮動時,將自動排列(水平方向) *兄弟元素,後一個元素設置為浮動,前一個元素不浮動,後一個元素的位置不能超過前一個元素 ...
  • function getobjArr (data) { var result = []; data.HELMET.system = '系統分類' // console.log(data) $.each(data.HELMET, function (index_h, e... ...
  • 這兩天學習類、屬性、方法、對象等概念,由於原來基礎比較薄弱,沒接觸過面向對象的語言,一遍看下來,徹底懵逼了。 啃了兩天,才算是不那麼懵了。簡單記錄下。 Class是一種抽象概念,比如我們定義的Class——Student,是指學生這個概念,而實例(Instance)則是一個個具體的Student,比 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...