day18总结和作业
day18
一,匹配類符號
1.正則表達式
是一種可以讓一些復雜的字符串問題變得簡單的工具。
2.正則語法(通用)
1)re模塊
fullmatch(正則表達式,字符串) - 判斷整個字符串是否滿足正則表達式描述的規(guī)則(完全匹配)
python提供正則表達式的方法:提供一個字符串,字符串內容是一個正則表達式,這個字符串的最前面需要加r
2)正則語法內容
包括:匹配類符號、控制次數的符號、分組和分支、檢測類符號
3.匹配類符號 - 約束字符串中某個位置上的字符是什么樣的字符
1)普通符號(字符)
在正則表達式中表示字符本身的符號就是普通符號(除了特殊符號以外的都是普通符號)
from re import fullmatch # r'abc' - 表示一個字符串有三個字符,分別是a、b和c result = fullmatch(r'abc', 'abc') print(result)2). - 點表示匹配任意一個字符
# r'.bc' - 表示一個字符串,有3個字符,第一個字符是任意字符,第2個和第3個分別是b和c result = fullmatch(r'.bc', '好bc') print(result)3)\d - 匹配任意一個數字字符
from re import fullmatch result1 = fullmatch(r'x\dy', 'x7y') print(result1)4)\s - 匹配一個空白字符
空白字符:任何可以產生空白效果的符號,例如 空格、\t、\n
5)\D - 匹配任意一個非數字字符
6)\S - 匹配一個非空白字符
7)[字符集] - 匹配字符集中的任意一個字符
""" [mnab] - 匹配m或者n或者a或者b [\dmn]、[m\dn] - 匹配任意數字或者m或者n [\d\s] - 匹配任意數字或者任意空白 [1-9] - 匹配1到9中任意數字 [0-9] - 和\d效果一樣 [a-z] - 匹配任意一個小寫字母 [1-5a-z] - 匹配數字1到5或者任意小寫字母 [A-Za-z] - 匹配任意一個字母 [\u4e00-\u9fa5] - 匹配任意一個中文 [\u4e00-\u9fa5wp] - 匹配任意一個中文或者w或者p """ result = fullmatch(r'x[Mn3+]y', 'xMy') print(result)result = fullmatch(r'x[\u4e00-\u9fa5\dwp]y', 'x3y') print(result)8)[ ^字符集 ] - 匹配不在字符集中的任意字符
二、控制次數的符號
控制次數符號的用法:匹配類符號次數
1.* - 任意次數(0或者多次)
""" a* - a出現0次或者多次 \d* - \d出現0次或者多次(任意數字出現0次或者多次) [abc]* - [abc]出現0次或者多次 """2.+ - 至少一次(1次或多次)
print(fullmatch(r'xa+y', 'xy')) # None print(fullmatch(r'xa+y', 'xaaaaay')) print(fullmatch(r'x[\u4e00-\u9fa5]+y', 'x函數y'))3.? - 0次或者1次
# 277、-728、+723 print(fullmatch(r'[+-]?[1-9]\d\d', '810')) print(fullmatch(r'??xy', '?xy'))4.{}
{N} - N次
{M,N} - M到N次
{M,} - 至少M次
{,N} - 最多N次
print(fullmatch(r'1[3-9]\d{9}', '13892839283')) print(fullmatch(r'123a{4}', '123aaaa')) print(fullmatch(r'123a{2,4}', '123aaa')) print(fullmatch(r'123a{2,}', '123aaaaaaaa'))# 練習:寫一個正則表達式可以匹配任意一個整數字符串 # 123、23、1、+23、-23、100,2, 2312312 - 合法 # 0002、23s、+-23、01 - 不合法 print(fullmatch(r'[+-]?[1-9]\d*', '10'))5.貪婪和非貪婪模式
在匹配次數不確定的時候,匹配次數有貪婪和非貪婪兩種模式
1)
默認是貪婪模式:*、+、{M,N}、{M,}、{,N}
貪婪模式:如果多種匹配次數都可以匹配成功,最后取最大的次數進行匹配
2)
非貪婪模式:*?、+?、{M,N}?、{M,}?、{,N}?
# 貪婪 print(search('a.+b', '上訪戶大富豪amnbxybmnhjb按實際符合sdf')) # 'amnbxyb'# 非貪婪 print(search('a.+?b', '上訪戶大富豪amnbxybmnhjb按實際符合sdf')) # 'amnb'print(search('a.+b', '上訪戶大富豪axyb按實際符合sdf')) print(search('a.+?b', '上訪戶大富豪axyb按實際符合sdf'))三、分組和分支
1.分組 - ()
1)整體操作:將正則的一部分用()括起來表示一個分組,然后整體控制次數
2)重復匹配結果:在正則中用()添加分組,然后在正則用 \N 來重復前面第N個分組的匹配結果
3)捕獲:findall函數在正則表達式中有分組的時候,只獲取分組匹配到的結果
2.分支 - |
正則1|正則2|正則3|…
注意:如果是正則的部分要進行分支選擇,需要將部分分支地方加()
四、檢測類符號
1.檢測類符號 - 檢測符號所在的位置是否符合條件(必須是在匹配成功前提下才檢測)
1)單詞邊界 - \b
檢測\b所在的位置是否是單詞邊界。
單詞邊界:凡是可以將兩個單詞區(qū)分開的符號都是單詞邊界,比如:字符串開頭、字符串結尾、空白字符、標點符號
注意:檢測類符號不影響字符串長度
2)檢測字符串開頭 - ^
3)檢測字符串結尾 - $
五、轉義符號
1.轉義符號
在正則中本身具備特殊功能灹特殊意義的符號前加’ \ ',讓他的功能消失,變成普通符號
print(fullmatch(r'\d\d\.\d\d', '12.34')) print(fullmatch(r'\d\+\d', '2+4')) print(fullmatch(r'abc\\d', 'abc\d')) print(fullmatch(r'\(\d\d\)', '(23)'))2.[]也可以讓獨立存在有特殊意義的符號功能消失
+、*、?、.、^、$、|等
注意:^和-在[]中的意義;[]在[]需要加\
print(fullmatch(r'\d\d[.+*?\]$^-]\d\d', '12]34'))六、re模塊
 1.re模塊中常用的函數及其功能
作業(yè)
利用正則表達式完成下面的操作:
一、不定項選擇題
能夠完全匹配字符串"(010)-62661617"和字符串"01062661617"的正則表達式包括( A B D)
A.r"\(?\d{3}\)?-?\d{8}" 
 B. r"[0-9()-]+" 
 C.r"[0-9(-)]*\d*" 
 D.r"[(]?\d*[)-]*\d*"
能夠完全匹配字符串"back"和"back-end"的正則表達式包括(A B C D)
 A. r'\w{4}-\w{3}|\w{4}'
 B. r'\w{4}|\w{4}-\w{3}'
 C.r'\S+-\S+|\S+'
 D. r'\w*\b-\b\w*|\w*'
能夠完全匹配字符串"go go"和"kitty kitty",但不能完全匹配“go kitty”的正則表達式包括(A)
 A.r '\b(\w+)\b\s+\1\b' 
 B. r'\w{2,5}\s*\1'
 C. r'(\S+) \s+\1' 
 D.r'(\S{2,5})\s{1,}\1'
A. r"a*?b"
B. r"a{,2}b"
C. r"aa??b"
D. r"aaa??b"
二、編程題
1.用戶名匹配
? 要求: 1.用戶名只能包含數字 字母 下劃線
? 2.不能以數字開頭
? 3.?度在 6 到 16 位范圍內
print(fullmatch(r'[A-Za-z_][0-9A-Za-z_]{5,15}', 'A23456'))? 要求: 1.不能包含!@#¥%^&*這些特殊符號
? 2.必須以字母開頭
? 3.?度在 6 到 12 位范圍內
print(fullmatch(r'[A-Za-z][^!@#¥%^&*]{5,11}', 'A234567'))提示: IP地址的范圍是 0.0.0.0 - 255.255.255.255
驗證輸入內容只能是漢字
from re import fullmatch, findall print(fullmatch(r'[\u4e00-\u9fa5]{1,}', '疾風亞索跑得快'))匹配整數或者小數(包括正數和負數)
from re import fullmatch, findall re_str = r'[+-]?(\d*|\d*.\d*)' print(fullmatch(re_str, '2.3'))驗證輸入用戶名和QQ號是否有效并給出對應的提示信息
要求:
 用戶名必須由字母、數字或下劃線構成且長度在6~20個字符之間
 QQ號是5~12的數字且首位不能為0
拆分長字符串:將一首詩的中的每一句話分別取出來
? poem = ‘窗前明月光,疑是地上霜。舉頭望明月,低頭思故鄉(xiāng)。’
總結
以上是生活随笔為你收集整理的day18总结和作业的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 通达信程序化交易接口API形式
 - 下一篇: JDK源码学习04-寄生虫LinkedH