python中如何使用正規表示式

2021-10-05 15:06:39 字數 3041 閱讀 9181

正規表示式, 簡稱為 regex, 是文字模式的描述方法。python 中所有正規表示式的函式都在 re 模組中,在python中使用正規表示式時都需要匯入re模組,否則就會遇到錯誤訊息 nameerror: name 're' is not defined。

一、建立正規表示式物件

向 re.compile()傳入乙個字串值,表示正規表示式,它將返回乙個 regex 模式物件(或者就簡稱為 regex 物件)。

二、匹配regex 物件

regex 物件的 search()方法查詢傳入的字串, 尋找該正規表示式的所有匹配。如果字串中沒有找到該正規表示式模式, search()方法將返回 none。如果找到了該模式,search()方法將返回乙個 match 物件。 match 物件有乙個 group()方法,它返回被查詢字串中實際匹配的文字。

總之,python 中使用正規表示式有幾個步驟:

1.用 import re 匯入正規表示式模組。

2.用 re.compile()函式建立乙個 regex 物件(記得使用原始字串,即通過在字串的第乙個引號之前加上 r,可以將該字串標記為原始字串,它不包括轉義字元)。

3.向 regex 物件的 search()方法傳入想查詢的字串。它返回乙個 match 物件。

4.呼叫 match 物件的 group()方法,返回實際匹配文字的字串。

#正規表示式查詢**號碼

#coding:utf-8

import re

phonenumregex = re.compile(r'\d\d\d-\d\d\d\d-\d\d\d\d')

mo = phonenumregex.search('my phonenumber is 139-1234-5678.')

print('phone number found: '+mo.group())

#輸出結果

phone number found: 139-1234-5678

三、正規表示式的模式匹配

1、使用括號分組模式匹配

新增括號在正規表示式中建立「 分組」:如上例中的**號碼分組(\d\d\d)-(\d\d\d)-(\d\d\d\d),然後可以使用 group()匹配物件方法,從乙個分組中獲取匹配的文字。正規表示式字串中的第一對括號是第 1 組,第二對括號是第 2 組,依次類推。向 group()匹配物件方法傳入整數,即要匹配文字的組號, 就可以取得匹配文字的不同部分。 向 group()方法傳入 0 或不傳入引數, 將返回整個匹配的文字。如果想要一次就獲取所有的分組, 請使用 groups()方法, 注意函式名的複數形式,groups()返回資料型別為元祖。

#coding:utf-8

import re

phonenumregex = re.compile(r'(\d\d\d)-(\d\d\d\d)-(\d\d\d\d)')

#print(phonenumregex)

mo = phonenumregex.search('my phonenumber is 139-1234-5678.')

print(mo.group(2,3))

print(type(mo.groups()))

#返回結果

('1234', '5678')

如果需要在文字中匹配括號,例如, 你要匹配的**號碼, 可能將區號放在一對括號中。在這種情況下, 就需要用「\」對"("和")"進行字元轉義。

2、用管道(|)匹配多個分組

字元|稱為「 管道」。希望匹配許多表示式中的乙個時, 就可以使用它。

#coding:utf-8

import re

nameregex = re.compile(r'張三|張思')

mo = nameregex.search('張三是我朋友')

print(mo.group())

#輸出結果

張三

上例中正規表示式 『張三|張思』 將匹配 『張三』 或者 『張思』,如果 張三 和 李思 都出現在被查詢的字串中, 第一次出現的匹配文字,將作為 match 物件返回。也可以使用管道來匹配多個模式中的乙個, 作為正規表示式的一部分。

#coding:utf-8

import re

nameregex = re.compile(r'張(三|思)')

mo1 = nameregex.search('張思和張三是我的朋友')

print(mo1.group())

print(mo1.group(1))

#輸出結果

張思

輸出結果1:要查詢名字都在被查詢字串中,根據匹配第一次出現的原則,返回張思這個名字。

輸出結果2:mo.group(1)返回第乙個括號分組內(三|思)匹配的文字『思』,使用了按照括號分組的模式匹配。

如果需要匹配真正的管道字元, 就用倒斜槓轉義,即\|。

3、使用問號(?)實現可選匹配

在實際應用中, 想匹配的模式是可選的。即不論這段文字在不在, 正規表示式都會認為匹配。字元?表明它前面的分組在這個模式中是可選的。

4、用星號(*)匹配零次或者多次

*( 稱為星號)意味著「匹配零次或多次」,即星號之前的分組,可以在文字**現任意次。它可以完全不存在,或一次又一次地重複。

5、用加號(+)匹配一次或者多次

*意味著「 匹配零次或多次」, +(加號) 則意味著「 匹配一次或多次」。 星號不要求分組出現在匹配的字串中, 但加號不同, 加號前面的分組必須「 至少出現一次」。這不是可選的。

6、用花括號匹配特定次數

1)如果想要乙個分組重複特定次數,就在正規表示式中該分組的後面,跟上花括號包圍的數字。例如(張三),匹配到的字串為『張三張三張三』。

2)還可以指定乙個範圍,即在花括號中寫下乙個最小值、乙個逗號和乙個最大值。例如(張三),匹配到的字串是「張三」,「張三張三」。

3)也可以不寫花括號中的第乙個或第二個數字, 不限定最小值或最大值。例如(張三)匹配的字串3次或者等多次,(張三)匹配字串0-5次。

python中如何使用正規表示式查詢字串

created on 2019年12月2日 author hp 格式化輸出時,是含有模式串的,同樣的,在python裡面,正規表示式就是作為模式串被使用的 如 匹配乙個不是字母的乙個字串的正規表示式表示的模式字串 a za z 再如 匹配乙個m開頭的單詞 bm w b 上面的模式字串真的正確嗎?事實...

python中如何使用正規表示式的集合字元示例

前言 在正規表示式裡,想匹配一些字元中的乙個,也就是說給出乙個字元的集合,只要出現這個集合裡任意的字元,都是成立的。比如 ab 就是將匹配任意出現a或b的字元。比如a ab 它是貪婪模式,將會匹配所有是a後面的a或b的字串,如abbaabbba。如果要改為非貪婪模式,要在後面新增?如下面的例子 示例...

VB中如何使用正規表示式

vb6.0中 在 專案 中的 referance 中選擇microsoft vbscript regular expression 5.5 確定function regexptest patrn,strng dim regex,retval 建立變 量。set regex new regexp 建立...