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

2021-10-02 01:12:46 字數 3924 閱讀 4336

'''

created on 2023年12月2日

@author: hp

'''''

'''''

格式化輸出時,是含有模式串的,同樣的,在python裡面,正規表示式就是作為模式串被使用的

如:匹配乙個不是字母的乙個字串的正規表示式表示的模式字串

'[^a-za-z]'

再如;匹配乙個m開頭的單詞:

'\bm\w*\b'

上面的模式字串真的正確嗎?事實上,他是錯誤的,因為乙個\表示的是轉義字元,需要在加上乙個才能表示真正的\

正確寫法:

'\\bm\\w*\\b'

python的開發人員考慮到了這樣比較麻煩,於是有了簡單的寫法,即在模式字串前面加上r或r,這樣的話裡面的字元就都不需要轉義了

所以上面的模式字串也可以寫成如下形式

r'\bm\w*\b'

tip: 並不是所有的反斜槓都需要轉義,如^\d$中的反斜槓並不需要轉義,因為\d並沒有特殊意義.這裡還是建議大家都用r或r開頭的方式使用原生字串

'''# ''

'使用re模組實現正規表示式'

''# 使用正規表示式,需要匯入rm模組

# 即:

# import re

# 1.

match

()方法

# match()方法用於從字串的開始處進行匹配,如果在起始位置匹配成功,則返回物件,

# 否則返回none,其語法格式如下:

# re.match(patten,string,[flags])

# pattern表示模式字串,由要匹配的正規表示式轉換而來

# string表示要匹配的字串

# flags表示標誌位,用於控制匹配方式,如是否區分大小寫.常用的標誌如下

# a或ascii 對於\w \w \b \b \d \d \s \s只進行ascii匹配

# i或ignorecase 執行不區分大小寫的匹配

# m或multiline 將^和$用於包括整的字串的開始和結尾的每一行(預設情況下,僅適用於整個字串的開始和結尾處)

# s或dotall 使用'.'字元匹配所有字元,包括換行符

# x或verbose 使用模式字串中未轉義的空格和注釋

# 例如,匹配字串是否以mr_開頭,不區分大小寫,**如下

import re

pattern=r'mr_\w+'

string=

'mr_shop mr_shop'

match=re.

match

(pattern,string,re.i)

# 上述方法返回乙個match物件,該物件有如下方法:

# start()方法:返回匹配值的起始位置

# end() 返回匹配值的結束位置

# span() 返回匹配位置的元組

# group() 返回匹配到的字串

# 還提供了string 屬性,用以獲取要匹配的字串

print

(match)

print

(match.

start()

,match.

end(),

'\n'

,match.

span()

,'\n'

,match.string,

'\n'

,match.

group()

)# 輸出結果:

# ,7

), match=

'mr_shop'

>

# 07

# (0,

7)# mr_shop mr_shop

# mr_shop

string=

"abcmr_shop mr_shop"

match=re.

match

(pattern,string,re.i)

print

(match)

# 輸出結果:

# none

# rm的serch()方法用於在整個字串中搜尋第乙個匹配到的值,也就是說,他不在是想

# match()方法一樣只匹配字串最開始的部分,而是遍歷整個字串,一直到匹配到或遍歷完為止

# 與match

()方法相同,匹配到返回match物件,否則返回none

# findall()用以查詢所有符合的字串,返回的是乙個由match物件組成的列表,用法與前兩個相同

#只是要對findall

()方法返回的列表進行遍歷從而輸出搜尋到的字串

#例:pattern=r'mr_\w+'

string=

'mr_shop mr_shop'

ans=re.

findall

(pattern,string,re.i)

print

(ans)

#注意,如果指定的模式字串中包含分組,則返回與分組匹配的文字列表,如:

pattern=r'[1-9](\.[0-9])'

str1=

'127.0.0.1 192.168.1.66'

ans=re.

findall

(pattern,str1)

print

(ans) #輸出:

['.1'

,'.66'

]# 輸出與預期的不一致,這是因為當模式字串中含有分組時,得到的結果會是分組中模式字串的結果,如果想要對整個模式字串匹配,應該對整個字串分組

# 然後在獲取結果時只取返回的列表的每乙個元素(是乙個元組)的第乙個元素

pattern=r'([1-9](\.[0-9]))'

ans=re.

findall

(pattern,str1)

for x in ans:

print

(x[0])

#輸出:

127.0

.0.1

# 192.168

.1.66

'''字串替換方法sub()'

''# re.sub(pattern, repl, string, count, flags)

# pattern表示模式字串

# repl表示替換的字串

# string表示要被查詢的原始字串

# count(可選)表示模式匹配後替換的最大次數,預設值為0,表示替換所有的匹配

# flags(可選)表示標誌位,用於控制匹配方式,常用的標誌在介紹match()方法時已經介紹過,這裡不再列舉

pattern=r'1[345678]\d'

string=

'中獎號碼為:84978981 聯絡**為:13122782807'

result=re.

sub(pattern,

'1*********x'

, string)

print

(result)

'''使用正規表示式分割字串'

''# re.split(pattern, string, maxsplit, flags)

# maxsplit表示最大拆分多少次(可選)

# flags表示匹配模式(可選)

pattern=r'[?|&]'

url=

'"mr"pwd="mrsoft"'

result=re.

split

(pattern, url)

print

(result)

#輸出為:

['','username="mr"pwd="mrsoft"']''

'關於正規表示式的介紹以及python中正規表示式的用法就介紹到這裡了,筆者也是剛學,如果有不足之處,還請多多包涵'

''

python中如何使用正規表示式

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

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 建立...