使用Python驗證常見的50個正則表達式

什么是正則表達式?

正則表達式(Regular Expression)通常被用來檢索、替換那些符合某個模式(規則)的文本。

此處的Regular即是規則、規律的意思,Regular Expression即“描述某種規則的表達式”之意。

本文收集了一些常見的正則表達式用法,方便大家查詢取用,并在最后附了詳細的正則表達式語法手冊。

案例包括:郵箱、身份證號、手機號碼、固定電話、域名、IP地址、日期、郵編、密碼、中文字符、數字、字符串

Python如何支持正則?

我用的是python來實現正則,并使用Jupyter Notebook編寫代碼。

Python通過re模塊支持正則表達式,re 模塊使 Python 語言擁有全部的正則表達式功能。

這里要注意兩個函數的使用:

re.compile用于編譯正則表達式,生成一個正則表達式( Pattern )對象;

.findall用于在字符串中找到正則表達式所匹配的所有子串,并返回一個列表,如果沒有找到匹配的,則返回空列表。

# 導入re模塊
import re

1.郵箱

包含大小寫字母,下劃線,阿拉伯數字,點號,中劃線

表達式:

[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)

案例:

pattern = re.compile(r"[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)")strs = '我的私人郵箱是zhuwjwh@outlook.com,公司郵箱是123456@qq.org,麻煩登記一下?'
result = pattern.findall(strs)print(result)
['zhuwjwh@outlook.com', '123456@qq.org']

2. 身份證號

xxxxxx yyyy MM dd 375 0 十八位

  • 地區: [1-9]\d{5}
  • 年的前兩位: (18|19|([23]\d)) 1800-2399
  • 年的后兩位: \d{2}
  • 月份: ((0[1-9])|(10|11|12))
  • 天數: (([0-2][1-9])|10|20|30|31) 閏年不能禁止29+
  • 三位順序碼: \d{3}
  • 兩位順序碼: \d{2}
  • 校驗碼: [0-9Xx]

表達式:

[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]

案例:

pattern = re.compile(r"[1-9]\d{5}(?:18|19|(?:[23]\d))\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]")strs = '小明的身份證號碼是342623198910235163,手機號是13987692110'
result = pattern.findall(strs)print(result)
['342623198910235163']

3. 國內手機號碼

手機號都為11位,且以1開頭,第二位一般為3、5、6、7、8、9 ,剩下八位任意數字
例如:13987692110、15610098778

表達式:

1(3|4|5|6|7|8|9)\d{9}

案例:

pattern = re.compile(r"1[356789]\d{9}")strs = '小明的手機號是13987692110,你明天打給他'
result = pattern.findall(strs)print(result)
['13987692110']

4. 國內固定電話

區號3\~4位,號碼7\~8位

例如:0511-1234567、021-87654321

表達式:

\d{3}-\d{8}|\d{4}-\d{7}

案例:

pattern = re.compile(r"\d{3}-\d{8}|\d{4}-\d{7}")strs = '0511-1234567是小明家的電話,他的辦公室電話是021-87654321'
result = pattern.findall(strs)print(result)
['0511-1234567', '021-87654321']

5. 域名

包含http:\\或https:\\

表達式:

(?:(?:http:\/\/)|(?:https:\/\/))?(?:[\w](?:[\w\-]{0,61}[\w])?\.)+[a-zA-Z]{2,6}(?:\/)

案例:

pattern = re.compile(r"(?:(?:http:\/\/)|(?:https:\/\/))?(?:[\w](?:[\w\-]{0,61}[\w])?\.)+[a-zA-Z]{2,6}(?:\/)")strs = 'Python官網的網址是https://www.python.org/'
result = pattern.findall(strs)print(result)
['https://www.python.org/']

6. IP地址

IP地址的長度為32位(共有2^32個IP地址),分為4段,每段8位,用十進制數字表示
每段數字范圍為0~255,段與段之間用句點隔開 

表達式:

((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))

案例:

pattern = re.compile(r"((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))")strs = '''請輸入合法IP地址,非法IP地址和其他字符將被過濾!
增、刪、改IP地址后,請保存、關閉記事本!
192.168.8.84
192.168.8.85
192.168.8.86
0.0.0.1
256.1.1.1
192.256.256.256
192.255.255.255
aa.bb.cc.dd'''result = pattern.findall(strs)print(result)
['192.168.8.84', '192.168.8.85', '192.168.8.86', '0.0.0.1', '56.1.1.1', '192.255.255.255']

7. 日期

常見日期格式:yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd、yyyy.MM.dd

表達式:

\d{4}(?:-|\/|.)\d{1,2}(?:-|\/|.)\d{1,2}

案例:

pattern = re.compile(r"\d{4}(?:-|\/|.)\d{1,2}(?:-|\/|.)\d{1,2}")strs = '今天是2020/12/20,去年的今天是2019.12.20,明年的今天是2021-12-20'
result = pattern.findall(strs)print(result)
['2020/12/20', '2019.12.20', '2021-12-20']

8. 國內郵政編碼

我國的郵政編碼采用四級六位數編碼結構
前兩位數字表示省(直轄市、自治區)
第三位數字表示郵區;第四位數字表示縣(市)
最后兩位數字表示投遞局(所)

表達式:

[1-9]\d{5}(?!\d)

案例:

pattern = re.compile(r"[1-9]\d{5}(?!\d)")strs = '上海靜安區郵編是200040'
result = pattern.findall(strs)print(result)
['200040']

9. 密碼

密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線)

表達式:

[a-zA-Z]\w{5,17}

強密碼(以字母開頭,必須包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間)

表達式:

[a-zA-Z](?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}

pattern = re.compile(r"[a-zA-Z]\w{5,17}")strs = '密碼:q123456_abc'
result = pattern.findall(strs)print(result)
['q123456_abc']
pattern = re.compile(r"[a-zA-Z](?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}")strs = '強密碼:q123456ABc,弱密碼:q123456abc'
result = pattern.findall(strs)print(result)
['q123456ABc,']

10. 中文字符

表達式:

[\u4e00-\u9fa5]

案例:

pattern = re.compile(r"[\u4e00-\u9fa5]")strs = 'apple:蘋果'
result = pattern.findall(strs)print(result)
['蘋', '果']

11. 數字

  • 驗證數字:^[0-9]*$
  • 驗證n位的數字:^\d{n}$
  • 驗證至少n位數字:^\d{n,}$
  • 驗證m-n位的數字:^\d{m,n}$
  • 驗證零和非零開頭的數字:^(0|[1-9][0-9]*)$
  • 驗證有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$
  • 驗證有1-3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$
  • 驗證非零的正整數:^\+?[1-9][0-9]*$
  • 驗證非零的負整數:^\-[1-9][0-9]*$
  • 驗證非負整數(正整數 + 0)?^\d+$
  • 驗證非正整數(負整數 + 0)?^((-\d+)|(0+))$
  • 整數:^-?\d+$
  • 非負浮點數(正浮點數 + 0):^\d+(\.\d+)?$
  • 正浮點數?^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
  • 非正浮點數(負浮點數 + 0)?^((-\d+(\.\d+)?)|(0+(\.0+)?))$
  • 負浮點數?^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
  • 浮點數?^(-?\d+)(\.\d+)?$

12. 字符串

  • 英文和數字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
  • 長度為3-20的所有字符:^.{3,20}$
  • 由26個英文字母組成的字符串:^[A-Za-z]+$
  • 由26個大寫英文字母組成的字符串:^[A-Z]+$
  • 由26個小寫英文字母組成的字符串:^[a-z]+$
  • 由數字和26個英文字母組成的字符串:^[A-Za-z0-9]+$
  • 由數字、26個英文字母或者下劃線組成的字符串:^\w+$ 或 ^\w{3,20}$
  • 中文、英文、數字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$
  • 中文、英文、數字但不包括下劃線等符號:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
  • 可以輸入含有^%&',;=?$\”等字符:[^%&',;=?$\x22]+
  • 禁止輸入含有\~的字符:[^~\x22]+

附:正則表達式語法詳解

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94792.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94792.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94792.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis是單線程性能還高的原因

Redis是單線程Redis單線程是指Redis的網絡IO和鍵值對讀寫是由一個線程完成的,其他功能還是使用多線程執行Redis主干業務使用單線程的原因Redis本質就是一個大的共享資源,共享資源是需要對其進行并發控制的,即使增加了線程,大部分線程也是在等待互斥鎖,并行變串行,而且還需要進行…

若依前后端分離版學習筆記(七)—— Mybatis,分頁,數據源的配置及使用

一 Mybatis 1、Maven依賴 在ruoyi父項目的pom文件中有一個分頁插件的依賴 <!-- pagehelper 分頁插件 --> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version&…

灌區信息化智能管理系統解決方案

一、方案背景 灌區作為農業灌溉的重要基礎設施&#xff0c;承擔著保障糧食安全和促進農業可持續發展的關鍵作用。然而&#xff0c;傳統灌區管理方式普遍存在信息孤島、數據滯后、調度不精準等問題&#xff0c;導致水資源浪費和管理效率低下。在此背景下&#xff0c;灌區信息化智…

軟件包管理、緩存、自定義 YUM 源

1. 軟件包管理是啥 你可以把軟件包管理器理解成 Linux 的“應用商店 安裝工人”&#xff1a; 應用商店&#xff1a;幫你找到軟件&#xff08;包&#xff09;安裝工人&#xff1a;幫你下載安裝、配置、升級、卸載管理賬本&#xff1a;記錄系統里都安裝了啥、版本號是多少、依賴…

Pthon 本質詳解

理解 Python 的本質&#xff0c;不能僅僅停留在“它是一門編程語言”這個層面&#xff0c;而要深入其設計哲學、核心機制、以及它在編程世界中所扮演的角色。 可以把 Python 的本質概括為一句話&#xff1a;Python 的本質是一種以“簡潔優雅、易于讀寫”為核心設計哲學&#xf…

在Word文檔中用鍵盤直接移動(復制)內容

如何快速在Word文檔中剪切或復制內容到本文檔的其他位置&#xff1f;不用剪切或復制&#xff0c;再粘貼&#xff0c;只需要先選中內容&#xff0c;然后按下F2&#xff08;ShiftF2&#xff09;剪切&#xff08;復制&#xff09;內容&#xff0c;再把光標放到目標位置按下回車鍵就…

VRTE 的應用程序部署到Ubuntu上 報錯:bash: ./rb_exmd: No such file or directory

&#x1f6e0;? 如何在 Ubuntu 上部署 VRTE 3.5 的 AraCM_IPC 應用程序在將 VRTE 3.5 的 AraCM_IPC 應用部署到 Ubuntu 系統時&#xff0c;可能會遇到運行失敗的問題&#xff0c;提示類似&#xff1a;bash: ./rb_exmd: No such file or directory這通常并非文件不存在&#xf…

WD5202 非隔離降壓轉換芯片,220V降5V,輸出電流80MA

解鎖高效電源新境界&#xff1a;WD5202 非隔離降壓轉換芯片在當今電子設備飛速發展的時代&#xff0c;高效、穩定且低成本的電源解決方案至關重要。WD5202 作為一款卓越的非隔離降壓轉換芯片&#xff0c;正以其獨特的性能和廣泛的適用性&#xff0c;在眾多領域嶄露頭角&#xf…

庫函數版獨立按鍵用位運算方式實現(STC8)

位運算&#xff1a;更加簡便&#xff0c;單片機的內存就小&#xff0c;占的內存空間小一點案例&#xff1a; #include "GPIO.h" #include "Delay.h" #include "UART.h" // 串口配置 UART_Configuration #include "NVIC.h" // 中斷…

RA4M2_MINI開發(15)----配置RTC時鐘及顯示時間

RA4M2_MINI開發.15--配置RTC時鐘及顯示時間 概述視頻教學樣品申請硬件準備參考程序源碼下載新建工程工程模板保存工程路徑芯片配置工程模板選擇時鐘設置SWD調試口設置UART配置UART屬性配置設置e2studio堆棧e2studio的重定向printf設置R_SCI_UART_Open()函數原型回調函數user_ua…

使用Prometheus + Grafana + node_exporter實現Linux服務器性能監控

監控與告警系統部署&#xff1a;項目示例: "使用Prometheus Grafana node_exporter實現Linux服務器性能監控"描述: 在目標服務器部署node_exporter采集系統指標(CPU, 內存, 磁盤, 網絡)。部署配置Prometheus Server&#xff0c;抓取node_exporter數據。部署配置Gra…

IP防護等級及檢驗方法說明

IP防護等級說明&#xff1a; IP (Ingress Protection) 防護等級系統是由 IEC 60529 標準定義的&#xff0c;用于衡量電氣設備外殼對固體異物和液體進入的防護能力。IP代碼通常由兩位數字組成&#xff1a;第一位數字表示防固體異物等級(0-6)&#xff0c;第二位數字表示防水等級(…

最近看到的提示詞相關內容匯總

看看能不能總結出來一些提示詞最佳實踐 一定要動手實踐。 目前已經知道的提示詞好習慣 角色扮演 操作步驟 質量要求 結構化輸出 案例 Anthropic 視頻中提到,實際上作為一門科學,我們可以通過以下手段嘗試它。 最初的提示詞,不斷的嘗試,直到最終的提示詞。 優質提示詞結…

github代理

自己整理的github代理 代理網址 https://g.cachecdn.ggff.net/ https://gitcode.com/ https://git.mxg.pub/ https://xiake.pro/ https://github.akams.cn/ 手動更新 hosts 方法 適合臨時使用&#xff0c;Github 的ip經常變 Linux / MacOS hosts 路徑&#xff1a;/etc/host…

交換機100G模塊遠距離連接踩坑記錄

一、業務需求場景 兩個辦公場地之間相距較遠,大約有幾百米。網絡系統規劃兩個辦公場地的局域網之間通過100G 網絡連接,幾百米的距離使用多模光纖是不能滿足需求的,因此選擇使用單模光纖連接,交換機的模塊選擇使用華為QSFP28-100G-PSM4 模塊,這個模塊使用的是MPO接口。 兩個…

精通Python異步編程:深入理解Async/Await在LLM應用中的實踐

簡介 在現代高性能應用開發中,特別是在處理大型語言模型(LLM)時,高效處理I/O密集型操作至關重要。Python的async和await關鍵字通過異步編程提供了優雅的解決方案。本綜合指南將探討如何利用這些特性構建響應迅速、高效的LLM驅動應用。 目錄 理解同步與異步執行 Async/Await…

嵌入式第二十三課 !!!樹結構與排序(時間復雜度)

二叉樹樹概念 樹是 n(n > 0) 個結點的有限集合。若 n0 &#xff0c;為空樹。在任意一個非空樹中&#xff1a; &#xff08;1&#xff09;有且僅有一個特定的根結點&#xff1b;&#xff08;2&#xff09;當 n>1 時&#xff0c;其余結點可分為 m 個互不相交的有…

【MySQL】初識索引

目錄索引是什么優點和缺點B樹和B樹紅黑樹和哈希表存儲數據的局限B樹B樹MySQL中的頁頁是什么為什么要使用頁頁的結構三層樹高的B樹可以存放多少條記錄索引的分類主鍵索引普通索引唯?索引全?索引聚集索引和非聚集索引(重要)索引覆蓋創建索引自動創建手動創建創建復合索引查看索…

重生之我在暑假學習微服務第九天《后端拆分部分完結篇》

個人主頁&#xff1a;VON文章所屬專欄&#xff1a;微服務 微服務系列文章 重生之我在暑假學習微服務第一天《MybatisPlus-上篇》重生之我在暑假學習微服務第二天《MybatisPlus-下篇》重生之我在暑假學習微服務第三天《Docker-上篇》重生之我在暑假學習微服務第四天《Docker-下篇…

如何實現一個簡單的基于Spring Boot的用戶權限管理系統?

全文目錄&#xff1a;開篇語前言系統設計概述步驟一&#xff1a;創建Spring Boot項目步驟二&#xff1a;配置數據庫步驟三&#xff1a;定義實體類1. 用戶實體類 User2. 角色實體類 Role3. 權限實體類 Permission步驟四&#xff1a;創建JPA Repository步驟五&#xff1a;配置Spr…