Python高级语法-正则表达式
生活随笔
收集整理的這篇文章主要介紹了
Python高级语法-正则表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正則表達式在字符串匹配中起到巨大的作用。
簡介
幾個數據提取工具對比:
- re(正則表達式):速度很快,難度高(語法難記),不需要安裝(python標準庫內置)
- bs(BeautifulSoup):速度慢,使用簡單(find等語法),安裝簡單(pip)
- lxml:速度比較快,使用簡單(內置xpath),安裝一般(pip)
這里可以看到雖然正則表達式上手比較難,但是它幾乎是最通用速度最快最靈活的字符串分析工具。
本文只是介紹如何在Python中使用正則表達式,如何去寫正則表達式的式子不是一篇博客說得清的。
語法
- .表示任意一個字符除了\n
- []匹配中括號中任意字符
- \d任意一個數字
- \D除了數字
- \s空格,tab鍵
- \S除了空白
- \w單詞字符A-Z,a-z,0-9,_
- \W除了
- *表示前面內容重復零次或者多次
- +表示前面內容至少出現一次
- ?前面才出現的內容零次或者一次
- {m,n}允許前面的內容最少m次,最多n次
- ^匹配字符串的開始
- $匹配字符串的結尾
- \b匹配單詞的邊界
- ()對正則表達式內容進行分組,從第一個括號開始,編號逐漸增大
使用
1. 首先如何任何正則表達式使用的基礎都是編譯正則表達式的表達式生成正則表達式對象。
下面代碼表示字符串中找到數字串
import re p = re.compile(r'\d+') print(type(p))?
2. match(str,a,b)匹配字符串中符合條件的結果,a表示起始位置下標,b表示結束位置下標,只會在a,b之間查找
注意:match的結果是一個match對象,且得到的是第一個查找到的值。
import re p = re.compile(r'\d+') m = p.match("123nzcisbnkld45jh78") print(type(m)) print(m) <class '_sre.SRE_Match'> <_sre.SRE_Match object; span=(0, 3), match='123'>下面是match對象的一些常用方法。
import re p = re.compile(r'\d+') m = p.match("123nzcisbnkld45kl67") # 匹配到的match對象的文本值 print(m[0]) # 匹配到的match對象在源字符串中的下標起始位置 print(m.start(0)) # 匹配到的match對象在源字符串中的下標結束位置 print(m.end(0)) 123 0 3注意:search方法和match類似,返回一個match對象。
3. findall(str,a,b)參數含義和match完全一致
import re p = re.compile(r'\d+') rst = p.findall("one12two34three567") print(rst) ['12', '34', '567']可以看到返回的是一個匹配到的所有結果字符串組成的列表。個人覺得這種方法會比較常用,例如使用爬蟲時下面的配合replace等處理使用(下面代碼包含html中查詢指定標簽的寫法)。
import re html = ''' <td class="ip"><span style='display: inline-block;'>13</span><div style='display: inline-block;'></div><p style='display: none;'>8</p><span>8</span><p style='display:none;'>.2</p><span>.2</span><p style='display: none;'>0</p><span>0</span><span style='display: inline-block;'>1.</span><p style='display:none;'>10</p><span>10</span><span style='display:inline-block;'>1.</span><div style='display:inline-block;'>33</div>:<span class="port DFEE">8173</span></td> ''' # 匹配p標簽的一種寫法,其他標簽可以類似修改 p =re.compile(r'<p.*?>[^<]*?</p>') lll = p.findall(html) print(lll) for item in lll:print(item)html.replace(item, "") ["<p style='display: none;'>8</p>", "<p style='display:none;'>.2</p>", "<p style='display: none;'>0</p>", "<p style='display:none;'>10</p>"] <p style='display: none;'>8</p> <p style='display:none;'>.2</p> <p style='display: none;'>0</p> <p style='display:none;'>10</p>更多操作可以查看Python官方參考文檔。?
總結
以上是生活随笔為你收集整理的Python高级语法-正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python基础语法-对文件的操作
- 下一篇: python高级语法-高阶函数之map的