python正規表示式

2022-06-18 21:18:11 字數 2870 閱讀 3978

在python中需要通過正規表示式對字串進行匹配的時候,可以使用乙個模組,名字為re

#coding=utf-8

# 匯入re模組

import re

# 使用match方法進行匹配操作

result = re.match(正規表示式,要匹配的字串)

# 如果上一步匹配到資料的話,可以使用group方法來提取資料

result.group()

re.match是用來進行正則匹配檢查的方法,若字串匹配正規表示式,則match方法返回匹配物件(match object),否則返回none(注意不是空字串"")。

匹配物件macth object具有group方法,用來返回字串的匹配部分。

正規表示式的單字元匹配

字元功能

.匹配任意1個字元(除了\n)

[ ]匹配[ ]中列舉的字元

\d匹配數字,即0-9

\d匹配非數字,即不是數字

\s匹配空白,即 空格,tab鍵

\s匹配非空白

\w匹配單詞字元,即a-z、a-z、0-9、_

\w匹配非單詞字元

說明python中字串前面加上 r 表示原生字串

與大多數程式語言相同,正規表示式裡使用"\"作為轉義字元,這就可能造成反斜槓困擾。假如你需要匹配文字中的字元"\",那麼使用程式語言表示的正規表示式裡將需要4個反斜槓"\\":前兩個和後兩個分別用於在程式語言裡轉義成反斜槓,轉換成兩個反斜槓後再在正規表示式裡轉義成乙個反斜槓。

python裡的原生字串很好地解決了這個問題,有了原始字串,你再也不用擔心是不是漏寫了反斜槓,寫出來的表示式也更直觀。

匹配多個字元的相關格式

字元功能

*匹配前乙個字元出現0次或者無限次,即可有可無

+匹配前乙個字元出現1次或者無限次,即至少有1次

?匹配前乙個字元出現1次或者0次,即要麼有1次,要麼沒有

匹配前乙個字元出現m次

匹配前乙個字元至少出現m次

匹配前乙個字元出現從m到n次

字元功能

^匹配字串開頭

$匹配字串結尾

\b匹配乙個單詞的邊界

\b匹配非單詞邊界

字元功能

|匹配左右任意乙個表示式

(ab)

將括號中字元作為乙個分組

\num

引用分組num匹配到的字串

(?p)

分組起別名

(?p=name)

引用別名為name分組匹配到的字串

#coding=utf-8

import re

ret = re.search(r"\d+", "閱讀次數為 9999")

ret.group()

#coding=utf-8

import re

ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")

print ret

方法1:

#coding=utf-8

import re

ret = re.sub(r"\d+", '998', "python = 997")

print ret

方法2:

#coding=utf-8

import re

def add(temp):

strnum = temp.group()

num = int(strnum) + 1

return str(num)

ret = re.sub(r"\d+", add, "python = 997")

print ret

ret = re.sub(r"\d+", add, "python = 99")

print ret

需求:切割字串「info:xiaozhang 33 shandong」

#coding=utf-8

import re

ret = re.split(r":| ","info:xiaozhang 33 shandong")

print ret

python裡數量詞預設是貪婪的(在少數語言裡也可能是預設非貪婪),總是嘗試匹配盡可能多的字元;

非貪婪則相反,總是嘗試匹配盡可能少的字元。

在"*","?","+",""後面加上?,使貪婪變成非貪婪。

>>> s="this is a number 234-235-22-423"

>>> r=re.match(".+(\d+-\d+-\d+-\d+)",s)

>>> r.group(1)

'4-235-22-423'

>>> r=re.match(".+?(\d+-\d+-\d+-\d+)",s)

>>> r.group(1)

'234-235-22-423'

>>>

正規表示式模式中使用到通配字,那它在從左到右的順序求值時,會盡量「抓取」滿足匹配最長字串,在我們上面的例子裡面,「.+」會從字串的啟始處抓取滿足模式的最長字元,其中包括我們想得到的第乙個整型欄位的中的大部分,「\d+」只需一位字元就可以匹配,所以它匹配了數字「4」,而「.+」則匹配了從字串起始到這個第一位數字4之前的所有字元。

解決方式:非貪婪操作符「?」,這個操作符可以用在"*","+","?"的後面,要求正則匹配的越少越好。

python正規表示式元字元 正規表示式

字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

Python 正規表示式

1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...

Python正規表示式

學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是 python基礎教程 第二版 這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,...