python 正則表達式練習題

習題集一

習題1:判斷是否匹配成功,並輸出對應匹配信息

 

import repython

source = "1huhongqiang"正則表達式

if re.match("hu",source):#if re.match is not None函數

    print("能夠匹配到")spa

else:.net

    print ("沒有匹配到")3d

 

if re.search("hu",source):ip

     print ("能夠匹配到")utf-8

else:ci

print ("沒有匹配到")字符串

習題2: 找出一個字符串中是否有連續的5個數字

>>> print re.search(r"\d{5}","1234aadd222222").group()

22222

 

 

習題3:出一個字符串中的連續5個數字,要求數字先後必須是非數字

 

>>> re.search(r'(\D\d{5}\D)|(^\d{5}\D)|(\D\d{5}$)|(^\d{5}$)','12567').group()

'12567'

 

習題4:統計一個文件中單詞的數量

with open("d:\\word.txt","r") as file_obj:

    print(len(re.findall(r"(\b[A-Za-z]+\b)",file_obj.read())))

 

 

習題5:a1b23c4d非字符內容拼成一個字符串

>>> "".join(re.findall(r"[^A-Za-z]","a1b23c4d"))

'1234'

 

習題6:取最後一個字母

>>> re.findall(r"[A-Za-z]","ab12cd")[-1]

'd'

>>> re.search(r"[A-Za-z]$","ab12cd").group()

'd'

 

習題7:找出一個字符串中的全部數字

>>> pattern = re.compile(r"\d+")

>>> pattern.findall("a1cd33dd99kddd")

['1', '33', '99']

 

>>> pattern = re.compile(r"\d")

>>> pattern.findall("a1cd33dd99kddd")

['1', '3', '3', '9', '9']

 

 

習題8:把一個字符串中的全部字母找出並拼成一個字符串

>>> pattern = re.compile(r"[A-Za-z]")

>>> "".join(pattern.findall("a1cd34dsf0dsfkjk"))

'acddsfdsfkjk'

 

習題9:輸出句子中的全部單詞

>>> s = "I am a boy! you are a girl!"

>>> pattern = re.compile(r"([A-Za-z]+)")

>>> pattern.findall(s)

['I', 'am', 'a', 'boy', 'you', 'are', 'a', 'girl']

 

 

 

 

習題集二:

1、匹配一行文字中的全部開頭的字母內容

import re

s="i love you not because of who you are!"

print(re.findall(r"\b\w",s))

2、匹配一行文字中的全部開頭的數字內容

import re

s="12i love 34you not 56because of 7who 8999!"

print(re.findall(r"\b\d",s))

3、匹配一行文字中的全部開頭的數字內容或數字內容

import re

s="12i love 34you not 56beca11use of 7who 8999!"

print(re.findall(r"\d+",s))

4、 只匹配包含字母和數字的行

import re

s="because\n12sd 34er 56\ndf e4 54434"

print(re.findall(r"\w+",s,re.M))

5、寫一個正則表達式,使其能同時識別下面全部的字符串:'bat','bit', 'but', 'hat', 'hit', 'hut

import re

s="'bat', 'bit', 'but', 'hat', 'hit', 'hut','yat','har','hot'"

print(re.findall(r"..t",s))

#print(re.findall(r"[bh][aiu]t",s))

6、匹配全部合法的python標識符

import re

s="awoeur awier !@# @#4_-asdf3$^&()+?><dfg$\n$"

print(re.findall(r".*",s,re.DOTALL))

7、提取每行中完整的年月日和時間字段

import re
s="我出生時間爲1990-01-01 00:00:00,今天時間爲2019-04-20 12:20:00"

for i in s.split(","):
     result=re.search(r"[12][0-9]{3}-([0][1-9]|[1][0-2])-([0-2][0-9]|[3][01]) ([01][0-9]|[2][0-3]):([0-5][0-9]):([0-5][0-9])",i)
     if result:
         print(result.group())
     else:
         continue

結果爲:

1990-01-01 00:00:00

2019-04-20 12:20:00

8、將每行中的電子郵件地址替換爲你本身的電子郵件地址

# coding:utf-8
import re
s="""
1234867@qq.com
lihuali@sdcion.com
"""
s1="guolingping@sdcion.com"
for i in s.split("\n"):
    result=re.search(r"[\w]+@[\w]+.com",i)
    if result:
        s=s.replace(result.group(),s1)
    else:
        continue
print(s)

 

9、匹配\home關鍵字:

 

import re
s="123ahjfh\home123\homertuy"
for i in re.findall(r"\\home",s):
    print(i)

 

10、使用正則提取出字符串中的單詞

# coding:utf-8
import re
s="I am a boy, my is 19 year!"
print(" ".join(re.findall(r"\b[a-zA-Z]+\b",s)))

 

11、使用正則表達式匹配合法的郵件地址:

國際域名格式以下:

域名由各國文字的特定字符集、英文字母、數字及-(即連字符或減號)任意組合而成, 但開頭及結尾均不能含有「-」,「-」不能連續出現。域名中字母不分大小寫。域名最長可達60個字節(包括後綴.com.net.org)

import re
s="lisi_1234@qq.org"
result=re.match(r"^[\w]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$",s)
if result:
    print(result.group())

 

12、提取字符串中合法的超連接地址好比:s = '<a href="http://www.gloryroad.cn">光榮之路官網</a>'要求,給出的正則表達式能兼顧全部連接地址。

import re
s='<a href="http://www.gloryroad.cn">光榮之路官網</a>'
print(re.search(r'\w+://[w]{3}.\w+.\w{2,3}',s).group())

 

13、統計文件中單詞個數

# coding:utf-8
import re
s="I am a boy, my is 19 year!"
result=re.findall(r"\b[a-zA-Z]+\b",s)
print(result)
print("單詞個數爲:",len(result))

 

14、寫一個函數,其中用正則驗證密碼的強度

import re
"""
密碼長度大於或等於8位數
強:字母+數字+特殊字符
中:字母+數字,字母+特殊字符,數字+特殊字符
弱:純數字,純字母,純特殊字符
"""

def checklen(pwd):
    if len(pwd)>=8:
        return True
    else:
        return False

def is_strong_pwd(pwd):
    pattern=re.compile(r"^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)(?![a-zA-z\d]+$)(?![a-zA-z!@#$%^&*]+$)(?![\d!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$")
    result=pattern.findall(pwd)
    if result:
        return True
    else:
        return False

def is_inter_pwd(pwd):
    pattern=re.compile(r"^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$")
    result=pattern.findall(pwd)
    if result:
        return True
    else:
        return False

def is_weak_pwd(pwd):
    pattern=re.compile(r"^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+)$")
    result=pattern.findall(pwd)
    if result:
        return True
    else:
        return False

def checkpassword(pwd):

    #判斷密碼長度是否合法
    lenOK=checklen(pwd)

    #判斷是否強:字母+數字+特殊字符
    strongOK=is_strong_pwd(pwd)

    #判斷是否中:字母+數字,字母+特殊字符,數字+特殊字符
    interOK=is_inter_pwd(pwd)

    #判斷是否弱:純數字,純字母,純特殊字符
    weakOK=is_weak_pwd(pwd)

    print(lenOK)
    print(strongOK)
    print(interOK)
    print(weakOK)
    if lenOK:
        if strongOK:
            print("密碼的強度爲強的!")
        elif interOK:
            print("密碼的強度爲中的!")
        elif weakOK:
            print("密碼的強度爲弱的,建議修改!")
    else:
        print("密碼長度不合格!")

checkpassword("Helloworld#123")

結果爲:

True

True

True

False

密碼的強度爲強的!

15、匹配ip的正則表達式:

r'^(([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$'

# coding:utf-8
import re
s='172.16.23.189'
s1='11.2.123.1'
s2='255.255.255.255'
s2='0.0.0.0'
pattern=re.compile(r'^(([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$')print(pattern.match(s).group())

相關文章
相關標籤/搜索