日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python入门:正则表达式

發布時間:2024/9/30 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python入门:正则表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正則表達式是對字符串操作的一種邏輯公式,用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯

正則表達式是一種文本模式,模式描述在搜索文本時要匹配的一個或多個字符串

一、常用操作符

正則表達式中的常用操作符如下

操作符說明舉例
.表示單個字符
[ ]字符集,對單個字符給出取值范圍[abc] 表示a、b、c;[a-z] 表示a到z的任意單個字符
[^ ]給字符集,對單個字符串給出排除范圍[^abc] 表示非a、b、c的任意單個字符
*前一個字符0次或無限次擴展abc* 表示ab、abc、abcc…
+前一個字符1次或無限次擴展abc+ 表示abc、abcc、abccc…
?前一個字符0次或一次擴展abc? 表示ab、abc
|左右表達式中的任意一個abc|def 表示abc或def
{m}擴展前一個字符m次ab{2}c 表示abbc
{m, n}擴展前一個字符m到n次,包括n次ab{1,2}c 表示abc、abbc
^匹配字符串開頭^abc 表示以字符串abc開頭
$匹配字符串結尾
()分組標記,內部使用 | 操作符(abc|def )表示abc或def
\d數字符號,等價于[0-9]
\w等價于[A-Za-z0-9]

二、正則表達式的類型

raw string (原生字符串類型):不包含轉義字符的字符串,表示形式為r'text'

string(字符串類型):包含轉義字符的字符串

比如匹配數字符號,使用原生子串的形式表示為 r'\d',使用字符串類型表示的話,因為 \ 是特殊字符,因此需要進行轉義,表示為 '\\d'。由此可見使用原生字符串類型要相對簡單一些

三、Re庫常用的方法

Python 中通過 Re 庫提供對正則表達式的支持,下面主要介紹一下 Re 庫中主要使用的函數

1.re.search(pattern, string, flags):在一個字符串中搜索匹配正則表達式的第一個子串,返回 Match 對象

  • pattern:正則表達式的字符串或原生字符串的表示
  • string:待匹配的字符串
  • flags:正責表達式使用時的控制標記,這個參數是可變的

    flags 常用的標記:

  • re.I(re.IGNORECASE):忽略正則表達式的大小寫
  • re.M(re.MULTILINE):正則表達式中的 ^ 操作符將給定的字符串的每行當做匹配的開始
  • re.S(re.DOTALL):. 操作符能夠匹配所有字符,默認匹配除換行的所有字符

舉例

import re# 用于匹配連續的 5 個數字 match = re.search(r'\d{5}', 'f123456g654321')if match:print(match.group(0))# 12345

2.re.match(pattern, string, flags):從一個字符串的開始位置起匹配正則表達式,返回 Match 對象

舉例1

import re# 從字符串開始問看看匹配符合條件的 5 個連續的數字 match = re.match(r'\d{5}', 'f123456g654321') if match:print(match.group(0))# 輸出空,沒有符合條件的字符串

舉例2

import rematch = re.match(r'\d{5}', '123456g654321') if match:print(match.group(0))# 12345

3.re.findall(pattern, string, flags):搜索字符串,返回一個符合條件的所有子串的集合

舉例

import rels = re.findall(r'\d{5}', '123456g654321') print(ls)# ['12345', '65432']

4.re.split(pattern, string, maxsplit,flags):將一個字符串按照正則表達式匹配的結果進行分割,返回列表類型

  • maxsplit:表示最大的分割數

舉例

import rels = re.split(r'[a-z]', '123a45b6', maxsplit=1) print(ls)# ['123', '45b6'] -> 后面的字符串不進行分割而是整個返回

5.re.finditer(pattern, string, maxsplit,flags):搜索字符串,返回一個符合結果的迭代類型,每個迭代元素是 match 對象

舉例

import rem = re.finditer(r'\d{5}', '123456g654321') for i in m:print(i.group(0))# 12345 # 65432

6.re.sub(pattern, replace, string, maxsplit,count, flags):使用一個新的子串替換所有正則表達式匹配的子串,返回替換后的字符串

  • replace:替換符合正則表達式的新子串
  • 最大替換次數

舉例

import renew_str = re.sub(r'\d{5}', 'jas', '123456|654321') print(new_str)# jas6|jas1

PS:上面的所有例子我們使用的都是 Re 庫的函數式用法,這種函數式用法支持一次性的操作,Re 庫還提供了一種面向對象的用法,這種用法支持編譯后多次操作。使用方法如下

import reregex= re.compile(r'\d{5}') new_str = re.sub(regex, 'jas', '123456|654321')print(new_str)

上面 regex= re.compile(r'\d{5}') 用于將正則表達式的字符串形式編譯成正則表達式對象, 可以幫助我們更好理解正則表達式

四、Match對象

上面有兩個方法 re.match(pattern, string, flags) 、re.search(pattern, string, flags) 返回的是一個 Match 對象,這個 Match 對象是什么呢?下面來介紹一下

Match 對象中的屬性

  • string:帶匹配的字符串
  • re:匹配時使用的 pattern 對象(正則表達式)
  • pos:正則表達式搜索文本的開始位置
  • endpos:正則表達式搜索文本的結束位置

Match 對象中的方法

  • group(0):返回匹配后的字符串
  • start():匹配字符串在原始字符串中的起始位置
  • end():匹配字符串在原始字符串中的結束位置
  • span():匹配字符串在原始字符串中的返回起始與結束位置

例子

import repattern = re.compile(r'\d{5}') match = re.search(pattern, 'f123456g654321')print(match.re) print(match.span())# re.compile('\\d{5}') # (1, 6)

五、貪婪匹配與最小匹配

我們通過例子來理解什么是貪婪匹配與最小匹配

import re# '*' 表示匹配前面任意字符且任意個數 pattern = re.compile(r'p.*') match = re.search(pattern, 'pfds45')if match:print(match.group(0))# pfds45

上面這種方式是貪婪匹配,也是 python 默認的匹配方式

import re# '*?' 前一個字符 0 次或無限次擴展 pattern = re.compile(r'p.*?') match = re.search(pattern, 'pfds45')if match:print(match.group(0))# p

上面這種匹配的方式稱為最小匹配,因為是最小匹配因此返回匹配的結果是最小的

最小匹配操作符

  • *?:前一個字符 0 次或無限次匹配
  • +?:前一個字符 1 次或無限次擴展
  • ??:前一個字符 0 次或 1 次擴展
  • {m, n}?:擴展前一個字符 m 次至 n 次

總結

以上是生活随笔為你收集整理的Python入门:正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。