python 正則表達式提取字符串

以某個字符開始、某個字符結束,期待的提取結果包含首末字符串

提取公式:a = re.findall(“開始字符串.*末字符串”,str)

以某個字符開始、某個字符結束,期待的提取結果不包含末字符串,但包含首字符串

    提取公式:a = re.findall("開始字符串.*?(?=末字符串)",str)time = re.findall("202.*?(?=,)",content)  # 也就是提取以202開頭的,逗號結束的,且不包括逗號的

以某個字符開始、某個字符結束,期待的提取結果不包含首字符串,但包含末字符串:

    提取公式:a = re.findall("(?<=開始字符串).*末字符串",str)

以某個字符開始、某個字符結束,期待的提取結果不包含首、末字符串:

    提取公式1:a = re.findall("(?<=開始字符串).*?(?=末字符串)",str)提取公式2:a = re.findall(".*開始字符串(.*)末字符串*",str)micro_step = re.findall("(?<=micro_step=).*?(?=/global_step)", content)  # case4 方法1micro_step = re.findall(".*micro_step=(.*)/global_step*", content)  # case4方法2

起始字符串不固定(即從首字符串提取到固定的字符串結束),用^指定從首字符串開始

    提取公式:a = re.findall('^.*結束字符串',str)

特殊字符-需要轉義

$ :匹配字符串的結尾。 示例:World$ 可以匹配以 “World” 結尾的字符串
() :定義一個分組,用于對模式進行分組和捕獲。 示例:(ab)+ 可以匹配 “ab”、“abab”、“ababab” 等。
*  :匹配前面的元素零次或多次 示例:ab*c 可以匹配 “ac”、“abc”、“abbc”、“abbbc” 等
+ :匹配前面的元素一次或多次。 示例:ab+c 可以匹配 “abc”、“abbc”、“abbbc” 等,但不匹配 “ac”。
.  :匹配除換行符外的任意**一個**字符。 示例:a.b 可以匹配 “aab”、“axb”、“a@b” 等
[ ] :定義**一個**字符類,匹配其中任意一個字符。 示例:[aeiou] 可以匹配任意一個小寫元音字母  
?  :匹配前面的元素零次或一次。 示例:ab?c 可以匹配 “ac”、“abc”,但不匹配 “abbc”
\   :轉義
^  :匹配字符串的開頭。 示例:^Hello 可以匹配以 “Hello” 開頭的字符串
{} :定義重復次數的范圍。 示例:a{2,4} 可以匹配 “aa”、“aaa”、“aaaa”,但不匹配 “a” 或 “aaaaa”
|  :在兩個模式之間進行選擇,匹配其中一個。 示例:cat|dog 可以匹配 “cat” 或 “dog”
\b:匹配單詞邊界,即字符前后不是字母、數字或下劃線。 示例:\bword\b 可以匹配 “word”,但不匹配 “words” 或 “sword”。
\d:匹配任意**一個**數字字符,相當于[0-9]。 示例:\d{3} 可以匹配三位數字。
\w:匹配任意**一個**字母、數字或下劃線字符,相當于[a-zA-Z0-9_]。示例:\w+ 可以匹配一個或多個字母、數字或下劃線字符。
\s:匹配任意**一個**空白字符,包括空格、制表符、換行符等。 示例:Hello\sWorld 可以匹配 “Hello World” 或 “Hello\tWorld”。

python正則表達式取中間字符串

單個位置的字符串提取使用(.+?)

import restr = "a123b"print(re.findall(r"a(.+?)b",str))#輸出['123']

貪婪和非貪婪匹配

import restr = "a123b456b"
print(re.findall(r"a(.+?)b", str))
#輸出['123']#?控制只匹配0或1個,所以只會輸出和最近的b之間的匹配情況
print(re.findall(r"a(.+)b", str))#輸出['123b456']
print(re.findall(r"a(.*)b", str))#輸出['123b456']

多行匹配

如果你要多行匹配,那么需要加上re.S和re.M標志. 加上re.S后, .將會匹配換行符,默認.不會匹配換行符. 代碼如下

str = "a23b\na34b"
re.findall(r"a(\d+)b.+a(\d+)b", str)
#輸出[]
#因為不能處理str中間有\n換行的情況
re.findall(r"a(\d+)b.+a(\d+)b", str, re.S)
#s輸出[('23', '34')]

連續多個位置的字符串提取

這種情況我們可以使用(?P…)這個正則表達式來提取
有一行webserver的access日志:‘192.168.0.1 25/Oct/2012:14:46:34 “GET /api HTTP/1.1” 200 44 “http://abc.com/search” “Mozilla/5.0”’,我們想提取這行日志里面所有的內容,可以寫多個(?Pexpr)來提取,其中name可以更改為你為該位置字符串命名的變量,expr改成提取位置的正則即可

import re
line ='192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" 
"Mozilla/5.0"'
reg = re.compile('^(?P<remote_ip>[^ ]*) (?P<date>[^ ]*) "(?P<request>[^"]*)" 
(?P<status>[^ ]*) (?P<size>[^ ]*) "(?P<referrer>[^"]*)" "(?P<user_agent>[^"]*)"')
regMatch = reg.match(line)
linebits = regMatch.groupdict()
print(linebits)
for k, v in linebits.items() :print(k+": "+v)

用正則表達式提取字符串中的整數

import re
re.findall("\d+","asd1234")
 pattern2 = r"<div>.*?</div>"
matches2 = re.findall(pattern2, text)
print("\n非貪婪匹配結果:")
for match in matches2:print(match)
import retext = "Check out these websites: http://www.example.com, https://www.google.com, www.yahoo.com"# 匹配網址
url_pattern = r"(http|https)://([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})"
urls = re.findall(url_pattern, text)
for url in urls:full_url = url[0] + "://" + url[1]print(full_url)

使用sub函數進行替換

re.sub(pattern, repl, string, count=0, flags=0):在字符串中查找匹配正則表達式的部分,并進行替換。

import repattern = r"apple"
string = "I have an apple."
new_string = re.sub(pattern, "orange", string)
print(new_string)

## 常用的正則表達式
匹配數字:^\d+$ 可以匹配一個或多個數字。
匹配字母:^[a-zA-Z]+$ 可以匹配一個或多個字母。
匹配數字和字母:^[a-zA-Z0-9]+$ 可以匹配一個或多個數字和字母的組合。
匹配郵箱地址:^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 可以匹配常見的郵箱地址格式。
匹配URL:^(https?|ftp)://[^\s/$.?#].[^\s]*$ 可以匹配常見的URL格式。
匹配手機號碼:^1[3456789]\d{9}$ 可以匹配中國大陸的手機號碼格式。
匹配日期(YYYY-MM-DD):^\d{4}-\d{2}-\d{2}$ 可以匹配YYYY-MM-DD格式的日期。
匹配時間(HH:MM):^([01]\d|2[0-3]):[0-5]\d$ 可以匹配24小時制的時間格式。
匹配IP地址:^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ 可以匹配IPv4地址。
匹配HTML標簽:<(\w+)>(.*)<\/\1> 可以匹配簡單的HTML標簽,如<p>...</p>。
匹配郵政編碼:^[1-9]\d{5}$ 可以匹配6位數字的郵政編碼。
匹配身份證號碼:^\d{17}[\dXx]$ 可以匹配18位數字或17位數字加一個大寫字母X(校驗位)的身份證號碼。
匹配電話號碼(包括區號):^(\d{3,4}-)?\d{7,8}$ 可以匹配帶有可選區號的固定電話號碼。
匹配用戶名:^[a-zA-Z0-9_-]{3,16}$ 可以匹配長度為3到16個字符的用戶名,允許字母、數字、下劃線和減號。
匹配整數:^-?\d+$ 可以匹配正整數或負整數。
匹配浮點數:^-?\d+(\.\d+)?$ 可以匹配正浮點數或負浮點數。
匹配文件路徑(Windows):^[A-Za-z]:\\(?:[^\\/:*?"<>|\r\n]+\\)*[^\\/:*?"<>|\r\n]*$ 可以匹配Windows文件路徑,如C:\folder\file.txt。
匹配中文字符:[\u4e00-\u9fa5] 可以匹配任意一個中文字符。
匹配空白行:^\s*$ 可以匹配只包含空白字符的行。
匹配HTML標簽(非貪婪模式):<.*?> 可以匹配HTML標簽,但是在遇到第一個閉合的尖括號時停止匹配。

數量限定

字符	描述
X?	匹配前面的子表達式X零次或一次,要匹配 ? 字符使用 ?\?
X*	匹配前面的子表達式X零次或多次,要匹配 * 字符使用 ?\*
X+	匹配前面的子表達式X一次或多次,要匹配 + 字符使用 ?\+
X{n}	匹配前面的子表達式X n次
X{n,}	匹配前面的子表達式X最少n次
X{n,m}	匹配前面的子表達式X最少n次,不超過m次
# 匹配全部都是數字的字符串^[0-9]*$** 
# 匹配只有n位數字的字符串^\d{n}$**
# 匹配至少有n位數字的字符串^\d{n,}$**
# 匹配有m位到n位數字的字符串^\d{m,n}$**
# 匹配最多帶兩位小數的數字^([1-9][0-9]*)+(.[0-9]{1,2})?$** 
# 匹配帶1-2位小數的正數或負數^(\-)?\d+(\.\d{1,2})?$**
# 匹配正數、負數和小數^(\-|\+)?\d+(\.\d+)?$**
# 匹配正整數  ^   1-9 ]\d*$**
# 匹配負整數^-[1-9]\d*$**
# 匹配浮點數^(-?\d+)(\.\d+)?$**
# 匹配正浮點數^\d+\.\d+$**
# 匹配負浮點數^-\d+\.\d+$**
# 匹配漢字^[\u4e00-\u9fa5]{0,}$**
# 匹配英文和數字^[A-Aa-z0-9]+$**
# 匹配中文、英文、數字和下劃線組成的字符串^[\u4e00-\u9f5aA-Za-z0-9_]+$**
# 匹配email地址^[A-Za-z0-9._%±]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$**
# 匹配手機號碼^1[3456789]\d{9}$**
# 匹配URL地址’[a-zA-Z]+://[^\s]***
# 匹配身份證號碼(\d{15}$|^\d{18}$|\d{17}(\d|X|x))$**

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

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

相關文章

Cesium--旋轉3dtiles

以下代碼來自Cesium 論壇&#xff1a;3DTileset rotation - CesiumJS - Cesium Community 在1.118中測試可行&#xff0c;可直接在Sandcastle中運行&#xff1a; const viewer new Cesium.Viewer("cesiumContainer", {terrain: Cesium.Terrain.fromWorldTerrain()…

機器學習課程復習——線性回歸

Q&#xff1a;回歸和分類的區別&#xff1f; 回歸是連續的&#xff0c;分類是離散的 Q:用最小二乘法對線性回歸模型進行參數估計思路 例題

排序。。。

1. 掌握常用的排序方法&#xff0c;并掌握用高級語言實現排序算法的方法&#xff1b; 2. 深刻理解排序的定義和各種排序方法的特點&#xff0c;并能加以靈活應用&#xff1b; 3. 了解各種方法的排序過程及其時間復雜度的分析方法。 編程實現如下功能&#xff1a; &#xff08;1…

Makefile中error函數的用法

在 Makefile 中&#xff0c;error 函數是一個特殊的函數&#xff0c;用于在執行過程中生成一個錯誤消息并終止 Makefile 的執行。它的基本語法如下&#xff1a; $(error error-message)其中&#xff0c;error-message 是一個字符串&#xff0c;表示要顯示的錯誤消息。當 Makef…

vue+three.js渲染3D模型

安裝three.js: npm install three 頁面部分代碼&#xff1a; <div style"width: 100%; height: 300px; position: relative;"><div style"height: 200px; background-color: white; width: 100%; position: absolute; top: 0;"><div id&…

【繞過無限Debugger】

文章目錄 引言無限Debugger的工作原理繞過無限Debugger的常用技巧條件斷點法置空法代碼修改與加密 引言 在Web開發中&#xff0c;debugger語句是一種強大的JavaScript功能&#xff0c;允許開發者在代碼中設置斷點&#xff0c;便于調試和理解代碼執行流程。然而&#xff0c;這一…

【文末附gpt升級秘笈】程序的“通用性”與“過度設計”的困境

程序的“通用性”與“過度設計”的困境 四、解決方案的深入闡述 &#xff08;一&#xff09;明確需求和目標&#xff1a;需求驅動設計 在軟件開發的初期&#xff0c;我們需要與業務團隊緊密合作&#xff0c;深入了解項目的實際需求和目標。這不僅包括明確的功能需求&#xf…

filelist中+incdir+的用法

在大多數 Verilog 編譯器&#xff08;如 VCS、ModelSim/Questa、Verilator&#xff09;中&#xff0c;使用 incdir 選項指定包含路徑后&#xff0c;仍然需要在 filelist 文件中列出每一個 Verilog 源文件。incdir 選項僅告訴編譯器在特定目錄中查找頭文件&#xff08;例如 .vh …

go語言day4 引入第三方依賴 整型和字符串轉換 進制間轉換 指針類型 浮點數類型 字符串類型

Golang依賴下載安裝失敗解決方法_安裝go依賴超時怎么解決-CSDN博客 go安裝依賴包&#xff08;go get, go module&#xff09;_go 安裝依賴-CSDN博客 目錄 go語言項目中如何使用第三方依賴&#xff1a;&#xff08;前兩步可以忽略&#xff09; 一、安裝git&#xff0c;安裝程序…

linux學習week1

linux學習 一.介紹 1.概述 linux的讀法不下10種 linux是一個開源的操作系統&#xff0c;操作系統包括mac、windows、安卓等 linux的開發版&#xff1a;Ubuntu&#xff08;烏班圖&#xff09;、RedHat&#xff08;紅帽&#xff09;、CentOS linux的應用&#xff1a;linux在服…

歸并排序與快速排序總結-c++

一&#xff0c;歸并排序 歸并排序&#xff08;Merge sort&#xff09;是建立在歸并操作上的一種有效的排序算法。該算法分治法&#xff08;Divide and Conquer&#xff09;的一個非常典型的應用。 作為一種典型的分而治之思想的算法應用&#xff0c;歸并排序的實現由兩種方法…

KVM網絡模式設置

一、KVM網絡模式介紹 1、NAT ( 默認上網 ) 虛擬機利用host機器的ip進行上網,對外顯示一個ip;virbr0是KVM 默認創建的一個 Bridge,其作用是為連接其上的虛機網卡提供NAT訪問外網的功能,默認ip為192.168.122.1 2、自帶的Bridge 將虛擬機橋接到host機器的網卡上,vm和ho…

mysql如何一句實現二行數據的列對換?

二行數據相同列內容對換 思路&#xff1a;先用多表聯查的方式查詢出這二行數據&#xff0c;再將查詢改成修改語句&#xff0c;需要對換的列相互設置值。 //查詢 SELECT * fromser_ele_detail AS rule1JOIN ser_ele_detail AS rule2 ON ( rule1.account_no rule2.account_no …

240622_昇思學習打卡-Day4-ResNet50遷移學習

240622_昇思學習打卡-Day4-ResNet50遷移學習 我們對事物的認知都是一點一點積累出來的&#xff0c;往往借助已經認識過的東西&#xff0c;可以更好地理解和認識新的有關聯的東西。比如一個人會騎自行車&#xff0c;我們讓他去騎摩托車他也很快就能學會&#xff0c;比如已經學會…

使用容器部署redis_設置配置文件映射到本地_設置存儲數據映射到本地_并開發java應用_連接redis---分布式云原生部署架構搭建011

可以看到java應用的部署過程,首先我們要準備一個java應用,并且我們,用docker,安裝一個redis 首先我們去start.spring.io 去生成一個簡單的web項目,然后用idea打開 選擇以后下載 放在這里,然后我們去安裝redis 在公共倉庫中找到redis . 可以看到它里面介紹說把數據放到了/dat…

理解和實現 LFU 緩存置換算法

引言 在計算機科學中&#xff0c;緩存是一種重要的技術&#xff0c;用于提高數據訪問速度和系統性能。然而&#xff0c;由于緩存空間有限&#xff0c;當緩存滿了之后&#xff0c;就需要一種智能的策略來決定哪些數據應該保留&#xff0c;哪些應該被淘汰。LFU&#xff08;Least…

FLASH閃存

FLASH閃存 程序現象&#xff1a; 1、讀寫內部FLASH 這個代碼的目的&#xff0c;就是利用內部flash程序存儲器的剩余空間&#xff0c;來存儲一些掉電不丟失的參數。所以這里的程序是按下K1變換一下測試數據&#xff0c;然后存儲到內部FLASH&#xff0c;按下K2把所有參數清0&…

找不到mfc140u.dll怎么修復,mfc140u.dll丟失的多種修復方法

計算機丟失mfc140u.dll文件會導致依賴該文件的軟件無法正常運行。mfc140u.dll是Microsoft Visual C 2015的可再發行組件之一&#xff0c;它屬于Microsoft Foundation Class (MFC) 庫&#xff0c;許多使用MFC開發的程序需要這個DLL文件來正確執行。丟失了mfc140u.dll文件。會導致…

無人機無刷電機理論教學培訓課程

本文檔為一份關于Brushless電機理論的詳細教程&#xff0c;由TYTO Robotics編制&#xff0c;旨在幫助用戶理解brushless電機的工作原理、特性以及如何通過實驗測定其關鍵參數Kv和Kt。文檔首先介紹了brushless電機的基本組成&#xff0c;包括靜止的定子和旋轉的轉子&#xff0c;…