溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

43 正則中用sub和subn函數(shù)搜索與替換 使用split

發(fā)布時(shí)間:2020-03-02 14:45:57 來源:網(wǎng)絡(luò) 閱讀:246 作者:馬吉輝 欄目:大數(shù)據(jù)
第10課 正則中用sub和subn函數(shù)搜索與替換
# 使用sub和subn函數(shù)搜索和替換

'''
sub(正則表達(dá)式,要替換的字符串,母字符串)
'''

import re
result = re.sub('Bill','Mike', 'Bill is my son.')
print(result)       # Mike is my son.   把Bill 替換成 Mike

result = re.subn('Bill', 'Mike', 'Bill is my son, I like Bill')
print(result)       # ('Mike is my son, I like Mike', 2)    分組    把Bill 全部替換成 Mike  后面為2次
print(result[0])    # Mike is my son, I like Mike
print('已經(jīng)替換了{(lán)}次'.format(result[1]))    # 已經(jīng)替換了2次

# 使用'\N'引用匹配字符串的分組
# 1abc 1:abc   2xyz 2:xyz   9hfg 9:hfg
result = re.sub('([0-9])([a-z]+)',r'\1:\2' ,'01-1abc,02-2xyz,03-9hfg')
print(result)   # 01-1:abc,02-2:xyz,03-9:hfg

# 這里面 可以是函數(shù)
def fun():
    return r'[\1*\2]'
result = re.subn('([0-9])([a-z]+)',fun() ,'01-1abc,02-2xyz,03-9hfg')
print(result)      # ('01-[1*abc],02-[2*xyz],03-[9*hfg]', 3)
print(result[0])   # 01-[1*abc],02-[2*xyz],03-[9*hfg]
print(result[1])   # 3
第11課 正則中 使用split函數(shù)分隔字符串
# 使用split函數(shù)分隔字符串

import re
result = re.split(';','Bill;Mike;John')
print(result)     # ['Bill', 'Mike', 'John']

# 至少有1個(gè)逗號(hào)(,)或分號(hào)(;)或點(diǎn)(\.)或空白符空格(\s) *****
result = re.split(r'[,;\.\s]+','a,b,,,d.x,;ok')
print(result)     # ['a', 'b', 'd', 'x', 'ok']

# 用以3個(gè)小寫字母開頭,緊接著一個(gè)連字符(-),并以兩個(gè)數(shù)字結(jié)尾的字符串作為分隔符
# abc-12
result = re.split('[a-z]{3}-[0-9]{2}','testabc-3213productxyz-45abill')
print(result)         # ['test', '13product', 'abill']
result = re.split('[a-z]{3}-[0-9]{2}','testabc-3213productxyz-45abill',maxsplit=1)
print(result)         # ['test', '13productxyz-45abill']    只分割了一次
第12課 練習(xí)題

# 練習(xí)題講解

'''
1.  編寫一個(gè)正則表達(dá)式,匹配這幾個(gè)單詞:bat、Bit、But、hAt、hit、hut。
'''
import re
s1 = '^[bh][aiu]t$'
list =['bat','Bit','But','hAt','hit','hut']
for value in list:
    print(re.match(s1, value,re.I))
print("-------------------")

s2 = '^[bh][aiu]t$'
list =['bat','Bit','But','hAt','hit','hut']
for value in list:
    #print(re.match(s1, value,re.I))
    m = re.match(s2, value, re.I)
    print(m.group())
print("-------------------")

# 練習(xí)題講解
'''
2.  編寫一個(gè)正則表達(dá)式,匹配信用卡號(hào)。格式如下:
xxxx xxxx xxxx xxxx,其中x表示0到9的數(shù)字。每一組是4個(gè)數(shù)字,組與組之間需要有至少一個(gè)空格。\s+  至少一個(gè)空格
1234 4321 5432 1234    # 空白符空格(\s)
'''
import re
s = '^\d{4}\s+\d{4}\s+\d{4}\s+\d{4}$'
list = ['1234 4321 5432 1234','12345 4321 5432 1234']
for value in list:
    print(re.match(s,value,re.I))
'''
結(jié)果為第一個(gè)是匹配的 第二個(gè)是不匹配的 
<re.Match object; span=(0, 19), match='1234 4321 5432 1234'>
None
'''

print("-----------")
# 練習(xí)題講解
'''
3. 編寫一個(gè)匹配日期的正則表達(dá)式,日期格式:YYYY-MM?-DD?。
其中YYYY表示4位的年,MM?表示1位或2位的月,DD?表示1位或2位的日。
而且4位的年必須在2000年以后,包括2000年。
例如,2001-4-5、2004-05-1都符合要求。

'''
import re
s = '2\d{3}-\d{1,2}-\d{1,2}'
print(re.match(s, '2002-12-1'))   # <re.Match object; span=(0, 9), match='2002-12-1'>

ss = '日期1:2012-4-12   日期2:1997-1-4   日期3:2045-1-2'
print(re.findall(s,ss))    # ['2012-4-12', '2045-1-2'] 
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI