優質資源,python 正則表達式實踐 & python 網絡編程核心講解!

優質資源,python 正則表達式實踐 & python 網絡編程核心講解!

正則表達式

應用場景(私信小編007獲取大量學習資料!Python視頻教程以及書籍!)

  • 特定規律字符串的查找替換切割等
  • 郵箱格式、URL、IP等的校驗
  • 爬蟲項目中,特定內容的提取

使用原則

  • 只要是能夠使用字符串函數解決的問題,就不要使用正則
  • 正則的效率較低,還會降低代碼的可讀性
  • 世界上最難理解的三樣東西:醫生的處方、道士的神符、碼農的正則
  • 提醒:正則是用來寫的,不是用來讀的;在不知道功能的情況下,不要試圖閱讀別人的正則。

基本使用

  • 說明:正則的解析處理是由 re 模塊完成
  • 相關函數:
  • match:從開頭進行匹配,匹配到就返回正則結果對象,沒有就返回None
  • search:從任意位置匹配,匹配到一次就返回,沒有就返回None
import re
# 只從開頭匹配,找到返回一個正則結果對象,沒有找到返回None
# m = re.match('abc', 'abcsdhasdasjabcweuqo')
# 全部匹配,只要找到就停止並返回
m = re.search('abc', 'sdhabcsdasjabcweuqo')
if m:
# 提取匹配到的內容
print(m.group())
# 獲取匹配位置
print(m.span())
  • findall:全局匹配,返回匹配到的結果列表,沒有時返回空列表
# 匹配所有內容,返回匹配結果組成的列表,若沒有則返回空列表
f = re.findall('abc', 'qwsdhaslabcsadjlasdoiabcdakls')

if f:
print(f)
print(type(f))
  • compile:生成正則表達式對象
# 生成正則表達式對象,用於正則匹配
c = re.compile('hello')
# 從開頭進行匹配
# m = c.match('hellosdsjldkabc')
# 從任意位置匹配
m = c.search('shdjkhelloaskjdha')
if m:
print(m.group())
# 匹配所有
f = c.findall('helloasjdhakhello')
if f:
print(f)
  • 將正則的匹配分兩步完成:先創建正則對象,然後通過對象的match、search、findall方法完成匹配

正則規則

  • 單個字符:
普通字符:簡單來說就是一對一的完全匹配
[]:中間的任意一個字符
[a-z]:a~z之間的字符(所有小寫字母)

[0-9]:0~9之間的字符(所有數字)
[A-Z0-9]:所有的大寫字母和數字
[^abc]:除abc外的所有字符
. :匹配'\n'以外的任意字符
\d:所有的數字,等價於[0-9]
\D:所有的非數字,等價於[^0-9]
\w:所有的數字、字母(中文)、下劃線等(就是字)
\W:所有的非字字符(\w的取反)
\s:所有的空白字符(\n、\t、\t、空格等)
\S:所有的非空白字符
\b:詞邊界匹配(開頭、結尾、標點、空格)
\B:非詞邊界匹配
  • 次數控制
*:前面的字符出現任意次
+:前面的字符出現至少一次
?:前面的字符出現至多一次
{m}:指定次數,m表示出現的次數
{m,}:至少指定次數
{m,n}:指定範圍內的次數,m到n次之間
{,n}:至多n次,相當於{0,n}
  • 正則的匹配默認都是貪婪的(最大限度的匹配)
  • 邊界限定
  • ^:以指定的內容開頭
  • $:以指定的內容結尾
  • 示例
import re
# 以指定的內容開頭
# c = re.compile(r'^abc')
# 以指定的內容結尾
c = re.compile(r'kas$')
s = c.search('abcsdhkas')
if s:
print(s.group())
  • 優先級控制
  • |:表示或,它擁有最低的優先級
  • ():用於表示一個整體,明確的指定優先級
  • 示例:
import re
c = re.compile(r'a(hello|world)b')
s = c.search('aworldb')
if s:
print(s.group())
  • 分組匹配
  • 說明:()不但可以作為一個整體,還可以進行分組匹配
  • 示例1:
import re
c = re.compile(r'(\d+)([a-z]+)(\d+)')
s = c.search('shd327sjahdajhsd87892ehawksd')
if s:
print(s.group())
# 默認就是全部的匹配內容,等價於上式
print(s.group(0))
# 第一個()匹配到的內容
print(s.group(1))
print(s.group(2))
print(s.group(3))
print(s.span())
print(s.span(0))
print(s.span(1))
print(s.span(2))
print(s.span(3))
  • 示例2:給分組起名字
import re
# 固定匹配
# c = re.compile(r'
')
# \1表示前面第一個小括號匹配的內容
# c = re.compile(r'\w+\2>\1>')
# 給()起名字
c = re.compile(r'[a-z]+)>[a-z]+)>\w+(?P=ergou)>(?P=goudan)>')
s = c.search('
')
if s:
print(s.group())
  • 貪婪匹配
  • 貪婪:最大限度的匹配叫貪婪。正則的匹配默認是貪婪。
  • 非貪婪:只要滿足匹配條件,能少匹配就少匹配;通過可以使用'?'進行取消貪婪
  • 示例:
import re
# 取消任意多次的貪婪
# c = re.compile(r'a.*?b')
# 取消至少一次的貪婪
c = re.compile(r'a.+?b')
s = c.search('abdhsadjbsdjabs')
if s:
print(s.group())
  • 匹配模式
  • 說明:所謂模式就是對匹配的原則進行整體的修飾
  • 示例:
import re
# 忽略大小寫的匹配
# c = re.compile(r'hello', re.I)
# s = c.search('Hello world')
# 進行多行匹配,默認單行匹配
# c = re.compile(r'^hello', re.M)
# s = c.search('world \nhello')
# 做為單行處理 或 讓 . 能夠匹配 \n
c = re.compile(r'
.*?
', re.S)
# string = '
hello
'
string = '''

hello
'''
s = c.search(string)
if s:
print(s.group())
  • 字符轉義
  • 若匹配正則語法中的特定字符都需要進行轉義
  • 正則字符串會被處理兩次,python中處理一次,re模塊會在處理一次
  • 若不想考慮字符的轉義問題,可以在書寫正則字符串時前面加一個字符'r'
  • 添加'r'之後,在python不會再進行任何轉義,只需在與正則語法相關的字符前加''即可讓其使用原有意義
優質資源,python 正則表達式實踐 & python 網絡編程核心講解!


網絡編程

相關概念

  • OSI七層模型:開放系統互連參考模型。它從低到高分別是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。
  • TCP/IP:在OSI七層模型的基礎上簡化抽象出來的一套網絡協議簇,現在得到了廣泛使用。
  • TCP:傳輸控制協議
  • 有連接的,數據是安全有保障的
  • 傳輸的速度稍慢,三次握手、四次揮手、數據檢查
  • UDP:用戶數據報協議
  • 無連接的,數據是不可靠的
  • 傳輸的速度比較快
  • IP地址:唯一的一臺計算標識
  • 查看:ipconfig
  • ping:檢查網絡連通性
  • 使用:ping IP/域名
  • 端口號:每個應用可以擁有唯一的端口號
  • 範圍:0~65535
  • 系統:0~1024,常用的應用所佔用
  • http:80
  • https:443
  • smtp:25
  • ftp:21
  • ssh:22
  • mysql:3306
  • redis:6379
  • 自己:大於1024
  • 網絡編程核心:
  • IP + 端口
  • 庫:socket

TCP協議

  • 說明:面向連接、數據可靠(校驗重發)、三次握手、四次揮手、傳輸速度較慢
  • 原理:見 tcp.png
  • 示例:見 01-tcp-http.py
  • TCP協議的服務器與客戶端:見 02-tcp-server.py 與 03-tcp-client.py

UDP協議

  • 說明:面向無連接的、數據不可靠、傳輸速度較快,適應於對數據要求不嚴格的情況
  • 原理:見 udp.png
  • 示例:模擬飛秋髮送數據,見 04-udp-feiqiu.py
  • UDP協議的服務器與客戶端:見 05-udp-server.y 與 06-udp-client.py

StringIO與BytesIO

  • 說明:這些類型的對象可以與open返回的對象一樣操作,但是操作的內存中的數據
  • 方法:getvalue用於獲取所有數據
優質資源,python 正則表達式實踐 & python 網絡編程核心講解!


分享到:


相關文章: