程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

強烈推薦!Python 這個寶藏庫 re 正則匹配

編輯:Python

Python 的 re 模塊(Regular Expression 正則表達式)提供各種正則表達式的匹配操作。

在文本解析、復雜字符串分析和信息提取時是一個非常有用的工具,下面總結了 re 模塊的常用方法。

一. 預定義字符

\d 匹配所有的十進制數字 0-9
\D 匹配所有的非數字,包含下劃線
\s 匹配所有空白字符(空格、TAB等)
\S 匹配所有非空白字符,包含下劃線
\w 匹配所有字母、漢字、數字 a-z A-Z 0-9
\W 匹配所有非字母、漢字、數字,包含下劃線

二. 特殊字符

$:匹配一行的結尾(必須放在正則表達式最後面)
^:匹配一行的開頭(必須放在正則表達式最前面)
*:前面的字符可以出現0次或多次(0~無限)(貪婪匹配)
+:前面的字符可以出現1次或多次(1~無限)(貪婪匹配)
?:變"貪婪模式"為"勉強模式",前面的字符可以出現0次或1次(非貪婪匹配)
備注:符號.* 貪婪,符號.*? 非貪婪
.:匹配除了換行符"\n"之外的任意單個字符
|:兩項都進行匹配
[ ]:代表一個集合,有如下三種情況
[abc]:能匹配其中的單個字符
[a-z0-9]:能匹配指定范圍的字符,可取反(在最前面加入^)
[2-9] [1-3]:能夠做組合匹配
{ }:用於標記前面的字符出現的頻率,有如下情況:
{n,m}:代表前面字符最少出現n次,最多出現m次
{n,}:代表前面字符最少出現n次,最多不受限制
{,m}:代表前面字符最多出現n次,最少不受限制
{n}:前面的字符必須出現n次

三. 反斜槓說明

字符串中有反斜槓的,需要對反斜槓做轉義

四. 分組

():分組字符,可以為匹配到的內容分組,快速獲取到分組中的數據 在正則裡面 "()" 代表的是分組的意思,一個括號代表一個分組,你只能匹配到 "()" 中的內容。
group:用於查看指定分組匹配到的內容
groups:返回一個元組,組內為所有匹配到的內容
groupdict:返回一個字典,包含分組的鍵值對,需要為分組命名

五. 常用方法

match:在目標文本的開頭進行匹配
search:在整個目標文本中進行匹配
findall:掃描整個目標文本,返回所有與規則匹配的子串組成的列表,如果沒有匹配的返回空列表
split
re.split(pattern, string[, maxsplit=0, flags=0])
split(string[, maxsplit=0])
作用:可以將字符串匹配正則表達式的部分割開並返回一個列表

六. 正則表達式函數裡面的flags參數說明

flags定義包括:

re.I:忽略大小寫
re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴於當前環境
re.M:多行模式
re.S:’.’並且包括換行符在內的任意字符(注意:’.’不包括換行符)
re.U:表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴於 Unicode 字符屬性數據庫
在 Python 中使用正則表達式之前,先使用以下命令導入 re 模塊
import re
示例1:具體使用說明
例如:
‘(\d)(a)\1’ 表示:匹配第一是數字,第二是字符a,第三 \1 必須匹配第一個一樣的數字重復一次,也就是被引用一次。
如 “9a9” 被匹配,但 “9a8” 不會被匹配,因為第三位的 \1 必須是 9 才可以。
‘(\d)(a)\2’ 表示:匹配第一個是一個數字,第二個是a,第三個 \2 必須是第二組()中匹配一樣的。
如 “8aa” 被匹配,但 “8ab”,“7a7” 不會被匹配,第三位必須是第二組字符的復制版,也是就引用第二組正則的匹配內容。
print(re.match(r'(\w{3}).',"abceeeabc456abc789").group())
print(re.match(r'(\w{3}).*',"abceeeabc456abc789").group())#*貪婪匹配
print(re.match(r'(\w{3}).*?',"abceeeabc456abc789").group())#?非貪婪匹配
print(re.search(r'(\d{3})',"abceeeabc456abc789").group())
print(re.search(r'(\w{3})(\d+)(\1)',"abceeeabc456abc789abc").groups())
print(re.search(r'(\w{3})(\d+)(\1)',"abceeeabc456abc789abc").group(1))
print(re.search(r'(\w{3})(\d+)(\1)',"abceeeabc456abc789abc").group(2))
print(re.search(r'(\w{3})(\d+)(\1)',"abceeeabc456abc789abc").group(3))
print(re.search(r'(\w{3})(\d+)(\2)',"abceeeabcs456456abc456789abc").groups())
print(re.search(r'(\w{3})(\d+)(\2)',"abceeeabcs456456abc456789abc").group(1))
print(re.search(r'(\w{3}).*?(\1)',"abceeeabc456abc789abc").group(1))
print(re.search(r'(\w{3}).*?(\1)',"abceeeabc456abc789abc").group(2))
print(re.search(r'(\w{3})(.*?)(\2)',"abceeeabc456abc789").group())
print(re.search(r'(\w{3}).*?(\1)',"abceeeabc456abc789").group(1,2))
print(re.findall(r'\d+','one11two22three33four44'))
print(re.split(r'\W+','192.168.1.1')) #\W匹配所有非字母、漢字、數字,包含下劃線,然後處理完成返回一個列表
print(re.split(r'(\W+)','192.168.1.1')) #加了括號後做了分組的處理,.號也被分割了
print(re.split(r'(\W+)','192.168.1.1',1)) #加了一個1這個參數後,表示最大分割深度為1
str1 = '''goodjobisgood: testisgood welldone '''
res1 = re.findall(r'good(.*?)done',str1)
 如果不使用re.S參數,則只在每一行內進行匹配,如果一行沒有,就換下一行重新開始,不會跨行。
而使用re.S參數以後,正則表達式會將這個字符串作為一個整體,將“\n”當做一個普通的字符加入到這個字符串中,在整體中進行匹配。
res2 = re.findall(r'good(.*?)done',str1,re.S)
print(res1)
print(res2)
示例2:網頁信息匹配
str1 = '<p>this is a herf<a href="www.baidu.com">goodjob</a></p>'
find = re.search('<a href="(.+)">(\w+)</a>', str1)
find = re.search('<a href="(?P<url>.+)">(?P<name>\w+)</a>', str1)
print(find.groups())
print(find.group(1))
print(find.group(2))
print(find.groupdict())
示例3:日期匹配
date1=input("請輸入年月日:")
result1=re.match(r'^(\d{4}-\d{1,2}-\d{1,2})$',date1)
print(result1.group())
示例4:郵箱正則匹配
re_email = r'^[a-zA-Z0-9_]{0,20}@(163|162|Gmail|yahoo)\.com'
email_address = input('請輸入郵箱')
res = re.search(re_email, email_address)
print(res)
print(email_address)
print(type(res))
print(res.group())
示例5:手機號匹配
phone=input("請輸入手機號:")
result2=re.match(r'1[35678]\d{9}',phone)
print(result2.group())

歡迎關注: 無量測試之道公眾號,回復: 領取資源

Python+Unittest框架API自動化、

Python+Unittest框架API自動化、

Python+Pytest框架API自動化、

Python+Pandas+Pyecharts大數據分析、

Python+Selenium框架Web的UI自動化、

Python+Appium框架APP的UI自動化、

Python編程學習資源干貨、

Vue前端組件化框架開發、

資源和代碼 免費送啦~

包含:數據分析、大數據、機器學習、測試開發、API接口自動化、測試運維、UI自動化、性能測試、代碼檢測、編程技術等。

微信搜索公眾號:無量測試之道添加關注,讓我們一起共同成長 !


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved