正則表達(dá)式就是定義一個(gè)字符串的匹配模式停蕉。
與正則表達(dá)式相關(guān)的文檔如下:
例子1:假如我們想要得到6-20位字符串并且該字符串由數(shù)字字母下劃線構(gòu)成。
在沒(méi)有使用正則表達(dá)式需要寫(xiě)如下的代碼:
def is_true(num):
if 6 <= len(num) <= 20:
for x in num:
if not ('0' <= x <= '9' or 'A' <= x <= 'Z'
or 'a' <= x <= 'z' or x == '_'):
return False
return True
return False
在使用正則表達(dá)式之后:
username = input('username = ')
pattern1 = re.compile(r'^[0-9a-zA-Z_]{6,20}$')
m1 = pattern1.match(username)
下面就是一個(gè)完整使用正則表達(dá)式的例子:
import re
def main():
username = input('username = ')
qqnum = input('qqnum = ')
pattern1 = re.compile(r'^[0-9a-zA-Z_]{6,20}$')
m1 = pattern1.match(username)
if not m1:
print('用戶格式錯(cuò)誤')
m2 = re.match(r'^[1-9]\d{4,11}$', qqnum) # 在使用r的時(shí)候表示字符串為原始的字符串弹砚,如果不使用r那么在這里的正則表達(dá)式就該寫(xiě)成:'^[1-9]\\d{4,11}$'
if not m2:
print('QQ號(hào)格式錯(cuò)誤')
if m1 and m2:
print('匹配成功')
if __name__ == '__main__':
main()
map函數(shù)的使用:
from re import findall
def main():
content = 'dsada4564sa4ds6a4d6sa'
mylist = findall(r'\d+', content)
mylist = list(map(int, mylist))
print(sum(mylist) / len(mylist)) # 916.8
if __name__ == '__main__':
main()
例子
1.手機(jī)號(hào)的驗(yàn)證
import re
def main():
pattern = re.compile(r'(?<=\D)1([38][0-9]|[5][0-35-9]|[4][57]|[7][678])\d{8}(?=\D)')
sentence = '大1558454564564架上15502344653讀看18883362572灑金18883362572ljl13402311456ll'
for temp in pattern.finditer(sentence):
print(temp) # <_sre.SRE_Match object; span=(16, 27), match='15502344653'>
print(temp.group()) # 15502344653
print(temp.span()) # (16, 27)
if __name__ == '__main__':
main()
2.替換字符串中的不良文件:
import re
def main():
sentence = '我操你大爺?shù)娜漳愣敻赡闳死褷擣uck你姑父'
pure = re.sub('[操艸草日干頂媽]|fuck|shit', '*',
sentence, flags=re.IGNORECASE)
print(pure)
sentence = 'Your go your way, I will go mine!' # 會(huì)將 , !.改成空格字符串
mylist = re.split(r'[\s,!.]', sentence)
print(mylist)
# 貪婪匹配
sentence = 'aabahdhsjb'
m = re.match(r'a.*b', sentence)
print(m)
# 懶惰匹配
sentence = 'aabahdhsjb'
m = re.match(r'a.*?b', sentence)
print(m)
if __name__ == '__main__':
main()
3.得到字符串中的數(shù)字求平均值:
import re
def avage(num):
pattern = re.compile(r'\d+')
m = pattern.findall(num)
totle = 0
i = 0
for x in m:
totle += int(x)
i += 1
return totle / i
def main():
n = input('n = ')
print(avage(n))
if __name__ == '__main__':
main()