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