欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中re模塊下的函數(shù)詳解

 更新時間:2023年08月24日 09:44:03   作者:sodaloveer  
這篇文章主要介紹了Python中re模塊下的函數(shù)詳解,re.match() 函數(shù)是從頭開始匹配一個符合規(guī)則的字符串,從起始位置開始匹配,匹配成功返回一個對象,未匹配成功返回None,需要的朋友可以參考下

一、re模塊下的函數(shù)

1.re.match()

re.match() 函數(shù)是從頭開始匹配一個符合規(guī)則的字符串,從起始位置開始匹配,匹配成功返回一個對象,未匹配成功返回None。

函數(shù)語法:

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

參數(shù)說明如下:

參數(shù)描述
pattern匹配正則表達式
string要匹配的字符串
flags標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等

要求:匹配"hello"字符串。

import re 
result=re.match("hello","hello world")
print(result)

輸出結果:

<re.Match object; span=(0, 5), match=‘hello’>

2.re.search()

re.search() 函數(shù)會在整個字符串內(nèi)查找匹配,只要找到第一個匹配然后返回,如果字符串沒有匹配,則返回None。

函數(shù)語法:

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

參數(shù)說明如下:

參數(shù)描述
pattern匹配正則表達式
string要匹配的字符串
flags標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等

要求:匹配出文章閱讀的次數(shù)。

import re
ret = re.search(r"\d+", "閱讀次數(shù)為 9999")
print(ret.group())

輸出結果:

9999

3.re.fullmatch()

re.fullmatch() 函數(shù)要求整個字符串完全匹配到正則表達式,就返回一個相應的匹配對象,否則就返回一個None。

函數(shù)語法:

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

參數(shù)說明如下:

參數(shù)描述
pattern匹配正則表達式
string要匹配的字符串
flags標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等

要求:匹配出"hello"字符串。

import re 
result=re.fullmatch("hello","hello world")
if result:
	print(result.group())
else:
	print("匹配失敗!")

輸出結果:

匹配失敗!

re.match() 、re.search() 和 re.fullmatch()三者區(qū)別

  • match()函數(shù)只檢測RE是不是在string的開始位置匹配
  • search()函數(shù)會掃描整個string查找匹配
  • fullmatch()函數(shù)會掃描整個string是否完全匹配
  • match()只有在0位置匹配成功才有返回,如果不是開始位置匹配成功的話,match()則返回none。fullmatch()要整個字符串完全匹配上,從0位置開始到結束位置,如果不是,fullmatch()則返回none。
import re
print(re.match('super', 'superstition').span())
print(re.match('super','insuperable'))

輸出結果:

(0, 5) None

import reprint(re.search(&#39;super&#39;,&#39;superstition&#39;).span())print(re.search(&#39;super&#39;,&#39;insuperable&#39;).span())

輸出結果:

(0, 5) (2, 7)

import re
print(re.search('super','superstition').span())
print(re.search('super','insuperable').span())

輸出結果:

None None super

4.re.findall()

re.findall() 函數(shù)在字符串中找到正則表達式所匹配的所有子串,按順序返回一個列表,如果沒有找到匹配的,則返回空列表。

函數(shù)語法:

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

參數(shù)說明如下:

參數(shù)描述
pattern匹配正則表達式
string要匹配的字符串
flags標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等

要求:匹配出所有的數(shù)字。

import re
print(re.findall(r"\d+","abafa 124ddwa56"))

輸出結果:

[‘124’, ‘56’]

要求:匹配出f開頭且左邊是空字符串的單詞。

import re
print(re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest'))

輸出結果:

[‘foot’, ‘fell’, ‘fastest’]

如果有多個組,返回與這些匹配的字符串元組列表。

import re
print(re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10'))

輸出結果:

[(‘width’, ‘20’), (‘height’, ‘10’)]

5.re.finditer()

re.finditer() 函數(shù)在字符串中找到正則表達式所匹配的所有子串,并把它們作為一個迭代器返回。

函數(shù)語法:

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

參數(shù)說明如下:

參數(shù)描述
pattern匹配正則表達式
string要匹配的字符串
flags標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等

要求:匹配出所有的數(shù)字。

import re
it = re.finditer(r"\d+", "12a32bc43jf3")
for match in it:
    print(match.group())

輸出結果:

12 32 43 3

6.re.split()

re.split() 函數(shù)按照能夠匹配子串將字符串分割后返回列表。

函數(shù)語法:

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

參數(shù)說明如下:

參數(shù)描述
pattern匹配正則表達式
string要匹配的字符串
maxsplit分隔次數(shù),maxsplit=1分隔一次,默認為0,不限制次數(shù)。
flags標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等

用pattern分隔開string。

要求:用非a-zA-Z0-9_字符切分字符串。

import re 
re.split(r'\W+','Words, words, words.')

輸出結果:

[‘Words’, ‘words’, ‘words’, ‘’]

如果maxsplit非零,最多進行maxsplit分隔,剩下的字符全部返回到列表的最后一個元素。

要求:用非a-zA-Z0-9_字符切分字符串且只分隔一次。

re.split(r'\W+', 'Words, words, words.', 1)

輸出結果:

[‘Words’, ‘words, words.’]

如果pattern中捕獲到括號,那么所有的組里的文字也會包含在列表里。

re.split(r'(\W+)', 'Words, words, words.')

輸出結果:

[‘Words’, ', ', ‘words’, ', ', ‘words’, ‘.’, ‘’]

如果分隔符里有捕獲組合,并且在匹配字符串的開始,那么結果將會以一個空字符串開始,對于結尾也是一樣。

re.split(r'(\W+)', '...words, words...')

輸出結果:

[‘’, ‘…’, ‘words’, ', ', ‘words’, ‘…’, ‘’]

用正則表達式切分字符串比用固定的字符更靈活。

正常的切分代碼:

'a b   c'.split(' ')

輸出結果:

[‘a’, ‘b’, ‘’, ‘’, ‘c’]

無法識別連續(xù)的空格,用正則表達式試試:

import re 
print(re.split(r'\s+','a b   c'))
#無論多少個空格都可以正常分割。加入,
print(re.split(r'[\s\,]+', 'a,b, c  d'))
#再加入;
print(re.split(r'[\s\,\;]+', 'a,b;; c  d'))

輸出結果:

[‘a’, ‘b’, ‘c’] [‘a’, ‘b’, ‘c’, ‘d’] [‘a’, ‘b’, ‘c’, ‘d’]

7.re.sub()

re.sub() 函數(shù)用于替換字符串中的匹配項。

函數(shù)語法:

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

參數(shù)說明如下:

參數(shù)描述
pattern匹配正則表達式
repl替換的字符串,也可以是一個函數(shù)。
string要被查找替換的原始字符串。
count模式匹配后替換的最大次數(shù),默認0表示替換所有的匹配。
flags標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等

前三個必選參數(shù),后兩個為可選參數(shù)。

要求:刪除注釋,移除非數(shù)字的內(nèi)容。

import re
phone = "2004-959-559 # 這是一個電話號碼"
# 刪除注釋
num = re.sub(r'#.*$', "", phone)
print("電話號碼 : ", num)
# 移除非數(shù)字的內(nèi)容
num = re.sub(r'\D', "", phone)
print("電話號碼 : ", num)

輸出結果:

電話號碼 : 2004-959-559

電話號碼 : 2004959559

repl參數(shù)可以是一個函數(shù),正則表達式使用了 (?P…) 語法,將匹配到的數(shù)字部分的字符串命名為value。

要求:將匹配的數(shù)字乘于 2。

import re
# 將匹配的數(shù)字乘于 2
def double(matched):
    value = int(matched.group('value'))
    return str(value * 2)
s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))

輸出結果:

A46G8HFD1134

8.re.compile()

re.compile() 函數(shù)將正則表達式的樣式編譯為一個正則表達對象(正則對象),可以用于匹配,通過這個對象的方法match(),search()以及其他。

這個表達式的行為可以通過指定標記的值來改變,值可以是以下任意變量。

prog=re.compile(pattern)
result=prog.match(string)

等價于

result=re.match(pattern,string)

如果需要多次使用這個正則表達式的話,使用re.compile()和保存這個正則對象以便利用,可以讓程序更加高效。

正則對象的方法和屬性

用compile編譯后的正則表達式對象支持以下方法和屬性:

pattern.search(string[, pos[, endpos]]) 掃描整個string尋找第一個匹配的位置,并返回一個相應的匹配對象。如果沒有匹配,就返回None。

pos參數(shù)可以選擇字符串開始搜索的位置索引,默認為0,它不完全等價于字符串切片,'^'樣式字符匹配字符串真正的開關,和換行符后面的第一個字符,但不會匹配索引 規(guī)定開始的位置。

可選的參數(shù)endpos限定了字符串搜索的結束,它假定字符串長度到endpos,所以只有從pos到endpos-1的字符會被匹配,如果endpos小于pos,就不會有匹配產(chǎn)生,另個,如果rx是一個編譯后的正則對象,rx.search(string,0,50) 等價于rx.search(string[:50],0)。

import re 
pattern=re.compile("o")
print(pattern.search("dog"))
print(pattern.search("dog",2))

輸出結果:

<re.Match object; span=(1, 2), match=‘o’> None

  • pattern.match(string[, pos[, endpos]]) 如果 string 的 開始位置 能夠找到這個正則樣式的任意個匹配,就返回一個相應的 匹配對象。如果不匹配,就返回 None。

pos參數(shù)可以選擇字符串開始搜索的位置索引,默認為0,它不完全等價于字符串切片,'^'樣式字符匹配字符串真正的開關,和換行符后面的第一個字符,但不會匹配索引 規(guī)定開始的位置。

import re 
pattern=re.compile("o")
print(pattern.match("dog"))
print(pattern.match("dog",1))

輸出結果:

None
<re.Match object; span=(1, 2), match=‘o’>

  • pattern.fullmatch() 如果整個string匹配這個正則表達式,就返回一個相應的匹配對象。否則就返回None。

可選參數(shù) pos 和 endpos 與 search() 含義相同。

import re 
pattern=re.compile("o[gh]")
print(pattern.fullmatch("dog"))
print(pattern.fullmatch("ogre"))
print(pattern.fullmatch("doggie",1,3))

輸出結果:

None None <re.Match object; span=(1, 3), match=‘og’>

  • pattern.findall(string[, pos[, endpos]]) 類似函數(shù) findall() , 使用了編譯后樣式,但也可以接收可選參數(shù) pos 和 endpos ,限制搜索范圍,就像 search()。
  • pattren.finditer(string[, pos[, endpos]]) 類似函數(shù) finditer() , 使用了編譯后樣式,但也可以接收可選參數(shù) pos 和 endpos ,限制搜索范圍,就像 search()。
  • pattern.split(string, maxsplit=0) 等價于 split() 函數(shù),使用了編譯后的樣式。
  • pattern.sub(repl, string, count=0) 等價于 sub() 函數(shù),使用了編譯后的樣式。

二、re模塊下函數(shù)的匹配對象

正則表達式的函數(shù)一旦匹配成功,就是object對象,匹配對象支持以下方法和屬性:

group() 返回被 RE 匹配的字符串

如果只有一個參數(shù),結果就是一個字符串,如果沒有參數(shù),默認為0,相應的返回值就是整個匹配字符串。

m=re.match(r"(\w+) (\w+)", "I love you, Tom")
m.group()
m.group(0)

輸出結果:

‘I love’

如果它是一個范圍[1…99],結果就是相應的括號組字符串。

m.group(1)
m.group(2)

輸出結果:

‘I’ ‘love’

如果有多個參數(shù),結果就是一個元組,第個參數(shù)對應一個。

m.group(1,2)

輸出結果:

(‘I’, ‘love’)

如果正則表達式使用了(?P…) 語法, groupN 參數(shù)就也可能是命名組合的名字。如果一個字符串參數(shù)在樣式中未定義為組合名,就引發(fā)一個 IndexError 異常。

import re
m=re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
print(m.group("first_name"))
print(m.group("last_name"))

輸出結果:

Malcolm Reynolds

命名組合同樣可以通過索引值引用

print(m.group(1))
print(m.group(2))

輸出結果:

Malcolm Reynolds

3.6版本后可以直接Match.getitem(g),等價于m.group(g)。

print(m[1])
print(m[2])
print(m['first_name'])
print(m['last_name'])

輸出結果:

Malcolm Reynolds

  • start() 返回匹配開始的位置
  • end() 返回匹配結束的位置
  • span() 返回一個元組包含匹配 (開始,結束) 的位置
import re 
result=re.match("hello","hello world")
print(result.start())
print(result.end())
print(result.span())

輸出結果:

0
5
(0, 5)

匹配對象總是有一個布爾值 True。 所以可以簡單的用 if 語句來判斷是否匹配

import re 
result=re.match("hello","hello world")
if result:
	print(result.group())
else:
	print("匹配失敗!")

輸出結果:

hello

到此這篇關于Python中re模塊下的函數(shù)詳解的文章就介紹到這了,更多相關Python的re模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論