Python中使用正則表達式以及正則表達式匹配規則

来源:https://www.cnblogs.com/detailNew/archive/2023/03/22/17243321.html
-Advertisement-
Play Games

​1 導庫 import re 2 使用模板 re_pattern = re.compile(pattern, flags=0) result = re.findall(re_pattern,string) 3 說明 參數 描述 pattern 匹配的正則表達式,如 r'abc' 可用來匹配abc ...


1 導庫

import re

2 使用模板

re_pattern = re.compile(pattern, flags=0)
result = re.findall(re_pattern,string)

3 說明

參數 描述
pattern 匹配的正則表達式,如 r'abc' 可用來匹配abc
flags

可選,標誌位,控制匹配方式,可選值:

re.I    忽略大小寫

re.L    表示特殊字元集\w \W \b \B \s \S,依賴於當前環境

re.M    多行模式

re.S    包括換行符在內的任意字元

re.U    根據Unicode字元集解析字元

re.X    為了增加可讀性,忽略空格和#後面的註釋

re.A    根據ASCII碼解析字元

string 待匹配字元串

 

方法 描述
compile 編譯正則表達式,生成一個正則表達式(Pattern)對象
findall 全文匹配,匹配結果以列表形式返回

4 示例

以下代碼用來在字元串 str 中匹配符合如下規則的字元串:

中英文括弧開頭+1個大寫字母+1個或無限個數字+0個或1個字元“.”+0個或1個字元“/”+0個或無限個數字+中英文括弧結尾

# 導庫
import re
# 待處理字元串
str = '小分裂細胞型(瀰漫性)非霍奇金淋巴瘤(M96720/3)(Y97.1)(Y77)(yyy)'
# 設定匹配規則,編譯
re_str = re.compile(r'[(|(][A-Z][0-9]+[.]?[/]?[0-9]*[)|)]', re.S)
# 匹配
ans = re.findall(re_str,str)
# 列印
print(ans)

在字元串 str 中的匹配結果如下,可見有三個字元串符合匹配規則:

5 正則表達式匹配規則

語法

描述

正則表達式示例

對應可匹配字元串示例

一般字元 匹配自身 abc abc
元字元
. 除了換行符之外的任意單個字元 a.c abc
* 匹配前面一個字元0或無限次 ab*

a

abbb

+ 匹配前面一個字元1次或無限次 ab+

ab

abbb

? 匹配前面一個字元0次或1次 ab?

a

ab

\ 轉義符,使後面一個字元保持原來的意思 a\.b a.b
[]

字元集,裡面的字元可以是任意數量個字元,也可以是一個範圍,比如可以是[abc]或者[a-c],均表示匹配abc中的一個字元。同時,可以將第一個字元設為^,用來表示取反,如[^abc]表示除了abc以外的字元。

 

註意,所有的特殊字元在[]內都失去其原有的特殊含義,如[.]僅表示匹配字元.而不是匹配任意字元了,當然,如果要使用]、-或^三個字元,仍需要使用轉義字元\

[abc]

[a-c]

a

b

c

{m} m是一個非負整數,表示匹配前一個字元m次 abc{2} abcc
{m,n} m和n都是非負整數,且m≤n,表示最少匹配m次且最多匹配n次 ab{2,4}c abbc
| 邏輯或,匹配左右表達式中的任意一個。具有“短路”特點,先匹配左側表達式,再匹配右側表達式。建議用()括起來,否則會作用於整個正則表達式 abc|123

abc

123

() 括弧,將表達式括起來作為一個分組。分組表達式是一個整體 a(bc)?d

ad

abcd

定位符
^ 匹配字元串的開頭字元 ^abc abc
$ 匹配字元串的結尾字元 abc$ abc
\b

匹配一個單詞的邊界

如\bab表示匹配字元串ab且ab前面要是空格

如ab\b表示匹配字元串ab且ab後面要是空格

\bab

可以匹配到abc中的ab

無法匹配到cab中的ab

\B 匹配非邊界 \Bab

可以匹配到cab中的ab

無法匹配到abc中的ab

預定義字元集
\d 匹配數字,等價於[0-9] a\dc a1c
\D 匹配非數字,等價於[^\d] a\Dc abc
\s 匹配空白字元,包括空格、製表符、換頁符等 a\sc a c
\S 匹配非空白字元,等價於[^\s] a\Sc abc
\w 匹配字母數字下劃線,等價於[a-zA-Z0-9_] a\wc a_c
\W 匹配非字母數字下劃線,等價於[^\w] a\Wc a c

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

-Advertisement-
Play Games
更多相關文章
  • 本文介紹基於Python中ArcPy模塊,對大量柵格遙感影像文件進行批量掩膜與批量重採樣的操作。 首先,我們來明確一下本文的具體需求。現有一個存儲有大量.tif格式遙感影像的文件夾;且其中除了.tif格式的遙感影像文件外,還具有其它格式的文件。 我們希望,依據一個已知的面要素矢量圖層文件,對上述文件 ...
  • aliases: [] tags : " #QA #Java " summary: [POI生成Excel超出的單元格樣式的最大數量] author : [yaenli] notekey: [20230322-100908] 問題現象 使用Apache POI生成Excel時,如果創建的單元格樣式過 ...
  • Tomcat生命周期管理 各種組件如何統一管理 Tomcat的架構設計是清晰的、模塊化、它擁有很多組件,加入在啟動Tomcat時一個一個組件啟動,很容易遺漏組件,同時還會對後面的動態組件拓展帶來麻煩。如果採用我們傳統的方式的話,組件在啟動過程中如果發生異常,會很難管理,比如你的下一個組件調用了sta ...
  • Tcl語言線上運行編譯,是一款可線上編程編輯器,在編輯器上輸入Tcl語言代碼,點擊運行,可線上編譯運行Tcl語言,Tcl語言代碼線上運行調試,Tcl語言線上編譯,可快速線上測試您的Tcl語言代碼,線上編譯Tcl語言代碼發現是否存在錯誤,如果代碼測試通過,將會輸出編譯後的結果。 該線上工具由IT寶庫提 ...
  • 直入主題: Q1:為什麼要用分散式鎖? 在分散式系統中,多個進程或線程可能會同時訪問共用資源,這可能會導致數據不一致、併發性問題、性能下降等問題。為瞭解決這些問題,我們通常會使用分散式鎖來協調多個進程或線程對共用資源的訪問。 分散式鎖是一種協調機制,它通過在共用資源上設置鎖來防止多個進程或線程同時訪 ...
  • 一.註解 1. 註解入門 Annotation是從JDK5.0開始引入的新技術 Annotation的作用: 不是程式本身,可以對程式做出解釋(這一點和註釋(comment)沒什麼區別) 可以被其他程式(比如:編譯器等)讀取 Annotation的格式: 註解是以“@註解名”在代碼中存在的,還可以添 ...
  • 原文:blog.csdn.net/qunqunstyle99/article/details/94717256 ThreadLocal是什麼 ThreadLocal是一個本地線程副本變數工具類。主要用於將私有線程和該線程存放的副本對象做一個映射,各個線程之間的變數互不幹擾,在高併發場景下,可以實現無 ...
  • 說明 使用 VLD 記憶體泄漏檢測工具輔助開發時整理的學習筆記。 1. 使用前的準備 參考本人另一篇博客 安裝 Visual Leak Detector 下載 vld-2.5.1-setup.exe 並按步驟安裝 VLD。這一種使用方式的特點是,在一臺電腦上安裝完成後,將 VLD 安裝目錄下的 lib ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...