當前位置:首頁 » 編程語言 » python正則表達式match

python正則表達式match

發布時間: 2023-07-17 07:29:51

A. python如何判斷正則表達式是否匹配成功

提問者寫的程序,邏輯是正確的,需要更改如下:

importre
s=re.match("d","abc")
prints,type(s)
ifstr(s)=='None':
print1
else:
print2
  1. 第四行,提問者是想控制s是否是空,但是通過第三行的type(s)可以看得出來,s的類型和==號後面的類型本身就是不匹配的,所以肯定不會運行第五行的內容;

  2. 修改如下,將第四行的s改為:str(s),轉化為字元串,這樣才可以比較。

B. Python正則表達式之re.match()

我們在面對生物數據,比如序列信息(比如鹼基序列、氨基酸序列等)的時候, 會時常要問,這其中是否包含著且含有多少某種已知的模式,一段DNA中是否包含轉錄起始特徵TATA box、一段RNA中是否包含某種lncRNA、一段肽鏈中是否包含鋅指結構等等;另一方面,我們在操作數據時,會時常遇到諸如把某個字元(對象)換成另一種字元(對象)的替換操作,而其本質還是如何搜索符合某種(替換)模式的對象。

在這些幾乎天天都可以碰到的 模式匹配/搜索問題中,正則表達式就是一把解決問題的利劍!
在Python的re模塊中,常用的有四個方法(match、search、findall、finditer)都可以用於匹配字元串,今天我們先來了解一下re.match()。

re.match()必須從字元串開頭匹配! match方法嘗試從字元串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。主要參數如下:

舉個栗子來理解一下它的用法:

運行結果:

從例子中我們可以看出,re.match()方法返回一個匹配的對象,而不是匹配的內容。通過調用span()可以獲得匹配結果的位置。而如果從起始位置開始沒有匹配成功,即便其他部分包含需要匹配的內容,re.match()也會返回None。

一般一個小括弧括起來就是一個捕獲組。我們可以使用group()來提取每組匹配到的字元串。
group()會返回一個包含所有小組字元串的元組,從 0 到 所含的小組號。

直接調用groups()則直接返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。
再舉一個栗子:

運行結果:

C. python 正則表達式怎麼匹配

Python本不等於正則語言,它只是內部集伏晌指成了一個正則引擎,這謹銷個引擎實現了正則語言的功能,在Python中,這個引擎就是re模缺配塊。所以,你要先『import re』。

下面網頁詳細介紹了正則本身和re模塊,可供參考,基本上覆蓋了所有內容。

D. python正則表達式使用實例有哪些

具體如下:

1、測試正則表達式是否匹配字元串的全部或部分regex=ur"" #正則表達式:if re.search(regex, subject): do_something()else: do_anotherthing() 。

2、測試正則表達式是否匹配整個字元串 regex=ur"/Z" #正則表達式末尾以/Z結束:if re.match(regex, subject): do_something()else: do_anotherthing() 。

3、創建一個匹配對象,然後通過該對象獲得匹配細節(Create an object with details about how the regex matches (part of) a string) regex=ur"" #正則表達式:

match = re.search(regex, subject)if match: # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() do_something()else: do_anotherthing()。

4、獲取正則表達式所匹配的子串(Get the part of a string matched by the regex) regex=ur"" #正則表達式:match = re.search(regex, subject)if match: result = match.group()else: result ="" 。

5、獲取捕獲組所匹配的子串(Get the part of a string matched by a capturing group) regex=ur"" #正則表達式:match = re.search(regex, subject)if match: result = match.group(1)else: result ="" 。

E. Python下正則表達式匹配包括換行符,語句怎麼寫求幫忙!

import re
matchs=re.finditer(r'<dd>(.*?)</dd>',htmltext,re.S)
for match in matchs:
print(match.group(1))
匹配時指定re.S可以讓點匹配所有字元,包括換行符

F. Python常用的正則表達式處理函數詳解

正則表達式是一個特殊的字元序列,用於簡潔表達一組字元串特徵,檢查一個字元串是否與某種模式匹配,使用起來十分方便。

在Python中,我們通過調用re庫來使用re模塊:

import re

下面介紹Python常用的正則表達式處理函數。

re.match函數

re.match 函數從字元串的起始位置匹配正則表達式,返回match對象,如果不是起始位置匹配成功的話,match()就返回None。

re.match(pattern, string, flags=0)

pattern:匹配的正則表達式。

string:待匹配的字元串。

flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。具體參數為:

re.I:忽略大小寫。

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

re.M:多行模式。

re.S:即 . ,並且包括換行符在內的任意字元(. 不包括換行符)。

re.U:表示特殊字元集 w, W, , B, d, D, s, S 依賴於 Unicode 字元屬性資料庫

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

import re #從起始位置匹配 r1=re.match('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.match('def','abcdefghi') print(r2)

運行結果:

其中,span表示匹配成功的整個子串的索引。

使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。

group(num):匹配的整個表達式的字元串,group() 可以一次輸入多個組號,這時它將返回一個包含那些組所對應值的元組。

groups():返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。

import re s='This is a demo' r1=re.match(r'(.*) is (.*)',s) r2=re.match(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())

運行結果:

上述代碼中的(.*)和(.*?)表示正則表達式的貪婪匹配與非貪婪匹配。

re.search函數

re.search函數掃描整個字元串並返回第一個成功的匹配,如果匹配成功則返回match對象,否則返回None。

re.search(pattern, string, flags=0)

pattern:匹配的正則表達式。

string:待匹配的字元串。

flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

import re #從起始位置匹配 r1=re.search('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.search('def','abcdefghi') print(r2)

運行結果:

使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。

group(num=0):匹配的整個表達式的字元串,group() 可以一次輸入多個組號,這時它將返回一個包含那些組所對應值的元組。

groups():返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。

import re s='This is a demo' r1=re.search(r'(.*) is (.*)',s) r2=re.search(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())

運行結果:


從上面不難發現re.match與re.search的區別:re.match只匹配字元串的起始位置,只要起始位置不符合正則表達式就匹配失敗,而re.search是匹配整個字元串,直到找到一個匹配為止。

re.compile 函數

compile 函數用於編譯正則表達式,生成一個正則表達式對象,供 match() 和 search() 這兩個函數使用。

re.compile(pattern[, flags])

pattern:一個字元串形式的正則表達式。

flags:可選,表示匹配模式,比如忽略大小寫,多行模式等。

import re #匹配數字 r=re.compile(r'd+')  r1=r.match('This is a demo') r2=r.match('This is 111 and That is 222',0,27) r3=r.match('This is 111 and That is 222',8,27)   print(r1) print(r2) print(r3)

運行結果:

findall函數

搜索字元串,以列表形式返回正則表達式匹配的所有子串,如果沒有找到匹配的,則返回空列表。

需要注意的是,match 和 search 是匹配一次,而findall 匹配所有。

findall(string[, pos[, endpos]])

string:待匹配的字元串。

pos:可選參數,指定字元串的起始位置,默認為0。

endpos:可選參數,指定字元串的結束位置,默認為字元串的長度。

import re #匹配數字 r=re.compile(r'd+')  r1=r.findall('This is a demo') r2=r.findall('This is 111 and That is 222',0,11) r3=r.findall('This is 111 and That is 222',0,27)   print(r1) print(r2) print(r3)

運行結果:

re.finditer函數

和 findall 類似,在字元串中找到正則表達式所匹配的所有子串,並把它們作為一個迭代器返回。

re.finditer(pattern, string, flags=0)

pattern:匹配的正則表達式。

string:待匹配的字元串。

flags:標志位,用於控制正則表達式的匹配方式,如是否區分大小寫,多行匹配等。

import re  r=re.finditer(r'd+','This is 111 and That is 222') for i in r:   print (i.group())

運行結果:

re.split函數

將一個字元串按照正則表達式匹配的子串進行分割後,以列表形式返回。

re.split(pattern, string[, maxsplit=0, flags=0])

pattern:匹配的正則表達式。

string:待匹配的字元串。

maxsplit:分割次數,maxsplit=1分割一次,默認為0,不限次數。

flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。

import re  r1=re.split('W+','This is 111 and That is 222')  r2=re.split('W+','This is 111 and That is 222',maxsplit=1)  r3=re.split('d+','This is 111 and That is 222')  r4=re.split('d+','This is 111 and That is 222',maxsplit=1)  print(r1) print(r2) print(r3) print(r4)

運行結果:

re.sub函數

re.sub函數用於替換字元串中的匹配項。

re.sub(pattern, repl, string, count=0, flags=0)

pattern:正則中的模式字元串。

repl:替換的字元串,也可為一個函數。

string:要被查找替換的原始字元串。

count:模式匹配後替換的最大次數,默認0表示替換所有的匹配。

import re  r='This is 111 and That is 222' # 刪除字元串中的數字 r1=re.sub(r'd+','',r) print(r1) # 刪除非數字的字元串  r2=re.sub(r'D','',r) print(r2)

運行結果:

到此這篇關於Python常用的正則表達式處理函數詳解的文章就介紹到這了,希望大家以後多多支持!

G. python的正則表達式

1,正則表達式的一些內容

        正則表達式主要是用來匹配文本中需要查找的內容,例如在一片文章中找出電話號碼,就中國的來說11位純數字(不說座機),則使用"d{11}" 意味匹配數字11次,就能准確的查找出文本中的電話號碼. 還有就是在編寫網路爬蟲的時候需要提取很多超鏈接再次進行爬取,使用正則表達式就很方便.直接匹配http開頭就行,當然也可以使用beautifulsoup的select方法.

看下面的程序看看正則表達提取文本中的郵箱:


w 匹配字母,數字,下劃線 

+ 匹配1次或者多次
re是正則表達式的工具包,工具包出錯的話在anaconda的命令行輸入"pip install re"安裝,其他的工具包也是如此.

re.compile()中的r示意不是轉義字元,也就是保持後面字元串原樣,findall返回一個列表.下面還有一個版本的程序略有不同.


compile的另一個參數re.IGONORECASE(忽略大小寫),還可以是re.DORALL,多行模式,具體功能也是模糊不清,不過在使用通配符 . 匹配的時候加上re.DOTALL參數能夠匹配換行.如果希望忽略大小寫和多行模式都開啟可以使用re.compile(r'....',re.IGNORECASE|re.DOTALL) .

表達式使用( ),對匹配到的內容分為3組 也就是(w+)出現字母,數字,下劃線一次或多次,這個分組就是下面使用match對象的grou()方法的時候的參數.不給參數和參數0都是得到整個匹配到的內容,  參數1得到第一個括弧匹配到的內容,以此類推參數2和3,如果沒有括弧分組的話使用參數會出現錯誤.
search( )查找和正則式匹配的內容,只匹一次後面的那個找不到.返回一個match對象


w 匹配字母,數字,下劃線

W 匹配字母,數字.下劃線之外的所有字元

d 匹配數字

D 匹配非數字

s 匹配空格,製表符,換行符

S匹配除空格製表符,換行符之外的其他字元

[ .... ]定義自己的匹配,如[aeiouAEIOU ]匹配所有的母音字母,注意不是匹配單詞.

{最少次數,最多次數},例如{3,9} 匹配3-9次,{ ,10}匹配0-10次. 默認為匹配最多次數(貪心匹配),非貪心模式在後面加上問號 


?  可選 0次或者1次吧  

+匹配1次或多次

*匹配0次或者多次

^ 判斷開頭 ^d 如果待匹配串是數字開頭則返回第一個數字

$判斷結尾  d$  如果待匹配串是數字結尾則返回最後一個數字

.   通配符,匹配除換行之外的所有字元

   d{11}  匹配數字11次

    . * 匹配所有字元除 換行

[a-zA-Z0-9._%+-]  小寫和大寫字母、數字、句點、下劃線、百分號、加號或短橫

[a-zA-Z]{2,4} 匹配字母 2 - 4次

H. 學Python正則表達式,這一篇就夠了

正則表達式是一個特殊的字元序列,可以幫助您使用模式中保留的專門語法來匹配或查找其他字元串或字元串集。 正則表達式在UNIX世界中被廣泛使用。

註:很多開發人員覺得正則表達式比較難以理解,主要原因是缺少使用或不願意在這上面花時間。

re模塊在Python中提供對Perl類正則表達式的完全支持。如果在編譯或使用正則表達式時發生錯誤,則re模塊會引發異常re.error。

在這篇文章中,將介紹兩個重要的功能,用來處理正則表達式。 然而,首先是一件小事:有各種各樣的字元,這些字元在正則表達式中使用時會有特殊的意義。 為了在處理正則表達式時避免混淆,我們將使用:r'expression'原始字元串。

匹配單個字元的基本模式

編譯標志可以修改正則表達式的某些方面。標志在re模塊中有兩個名稱:一個很長的名稱,如IGNORECASE,和一個簡短的單字母形式,如。

1.match函數

此函數嘗試將RE模式與可選標志的字元串進行匹配。

下面是函數的語法 :

這里是參數的描述 :

pattern : 這是要匹配的正則表達式。

string : 這是字元串,它將被搜索用於匹配字元串開頭的模式。 |

flags : 可以使用按位OR(|)指定不同的標志。 這些是修飾符,如下表所列。

re.match函數在成功時返回匹配對象,失敗時返回None。使用match(num)或groups()函數匹配對象來獲取匹配的表達式。

示例

當執行上述代碼時,會產生以下結果 :

2.search函數

此函數嘗試將RE模式與可選標志的字元串進行匹配。

下面是這個函數的語法 :

這里是參數的描述 :

pattern : 這是要匹配的正則表達式。

string : 這是字元串,它將被搜索用於匹配字元串開頭的模式。 |

flags : 可以使用按位OR(|)指定不同的標志。 這些是修飾符,如下表所列。

re.search函數在成功時返回匹配對象,否則返回None。使用match對象的group(num)或groups()函數來獲取匹配的表達式。

示例

當執行上述代碼時,會產生以下結果 :

3.匹配與搜索

Python提供基於正則表達式的兩種不同的原始操作:match檢查僅匹配字元串的開頭,而search檢查字元串中任何位置的匹配(這是Perl默認情況下的匹配)。

示例

當執行上述代碼時,會產生以下結果 :

4.搜索和替換

使用正則表達式re模塊中的最重要的之一是sub。

模塊

此方法使用repl替換所有出現在RE模式的字元串,替換所有出現,除非提供max。此方法返回修改的字元串。

示例

當執行上述代碼時,會產生以下結果 :

5.正則表達式修飾符:選項標志

正則表達式文字可能包含一個可選修飾符,用於控制匹配的各個方面。 修飾符被指定為可選標志。可以使用異或(|)提供多個修飾符,如前所示,可以由以下之一表示 :

6.正則表達模式

除了控制字元(+ ? . * ^ $ ( ) [ ] { } | ),所有字元都與其自身匹配。 可以通過使用反斜杠將其轉換為控制字元。

7.正則表達式示例

字元常量

字元類

特殊字元類

重復匹配

非貪婪重復

這匹配最小的重復次數 :


用圓括弧分組

反向引用

這與以前匹配的組再次匹配 :

備擇方案

python|perl : 匹配「python」或「perl」

rub(y|le) : 匹配 「ruby」 或 「ruble」

Python(!+|?) : 「Python」後跟一個或多個! 還是一個?

錨點

這需要指定匹配位置。

帶括弧的特殊語法


開課吧廣場-人才學習交流平台-開課吧

熱點內容
cryengine源碼 發布:2025-02-08 09:50:58 瀏覽:392
aardio可以反編譯嗎 發布:2025-02-08 09:50:53 瀏覽:482
公司營業執照密碼是什麼 發布:2025-02-08 09:47:56 瀏覽:854
體驗腳本 發布:2025-02-08 09:46:15 瀏覽:690
醫學生需要什麼配置的筆記本 發布:2025-02-08 09:45:34 瀏覽:771
騷擾電話資料庫 發布:2025-02-08 09:45:34 瀏覽:179
u盤文件加密器 發布:2025-02-08 09:40:35 瀏覽:769
plc數據存儲app 發布:2025-02-08 09:37:17 瀏覽:708
伺服器的峰值高低有什麼區別 發布:2025-02-08 09:35:46 瀏覽:689
maven預編譯 發布:2025-02-08 09:20:34 瀏覽:755