日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

day18总结和作业

發(fā)布時間:2024/3/24 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day18总结和作业 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

day18

一,匹配類符號

1.正則表達式

是一種可以讓一些復(fù)雜的字符串問題變得簡單的工具。

2.正則語法(通用)

1)re模塊

fullmatch(正則表達式,字符串) - 判斷整個字符串是否滿足正則表達式描述的規(guī)則(完全匹配)

python提供正則表達式的方法:提供一個字符串,字符串內(nèi)容是一個正則表達式,這個字符串的最前面需要加r

2)正則語法內(nèi)容

包括:匹配類符號、控制次數(shù)的符號、分組和分支、檢測類符號

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 - 匹配任意一個數(shù)字字符

from re import fullmatch result1 = fullmatch(r'x\dy', 'x7y') print(result1)

4)\s - 匹配一個空白字符

空白字符:任何可以產(chǎn)生空白效果的符號,例如 空格、\t、\n

5)\D - 匹配任意一個非數(shù)字字符

6)\S - 匹配一個非空白字符

7)[字符集] - 匹配字符集中的任意一個字符

""" [mnab] - 匹配m或者n或者a或者b [\dmn]、[m\dn] - 匹配任意數(shù)字或者m或者n [\d\s] - 匹配任意數(shù)字或者任意空白 [1-9] - 匹配1到9中任意數(shù)字 [0-9] - 和\d效果一樣 [a-z] - 匹配任意一個小寫字母 [1-5a-z] - 匹配數(shù)字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)[ ^字符集 ] - 匹配不在字符集中的任意字符

二、控制次數(shù)的符號

控制次數(shù)符號的用法:匹配類符號次數(shù)

1.* - 任意次數(shù)(0或者多次)

""" a* - a出現(xiàn)0次或者多次 \d* - \d出現(xiàn)0次或者多次(任意數(shù)字出現(xiàn)0次或者多次) [abc]* - [abc]出現(xiàn)0次或者多次 """

2.+ - 至少一次(1次或多次)

print(fullmatch(r'xa+y', 'xy')) # None print(fullmatch(r'xa+y', 'xaaaaay')) print(fullmatch(r'x[\u4e00-\u9fa5]+y', 'x函數(shù)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'))# 練習(xí):寫一個正則表達式可以匹配任意一個整數(shù)字符串 # 123、23、1、+23、-23、100,2, 2312312 - 合法 # 0002、23s、+-23、01 - 不合法 print(fullmatch(r'[+-]?[1-9]\d*', '10'))

5.貪婪和非貪婪模式

在匹配次數(shù)不確定的時候,匹配次數(shù)有貪婪和非貪婪兩種模式

1)

默認是貪婪模式:*、+、{M,N}、{M,}、{,N}

貪婪模式:如果多種匹配次數(shù)都可以匹配成功,最后取最大的次數(shù)進行匹配

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)整體操作:將正則的一部分用()括起來表示一個分組,然后整體控制次數(shù)

2)重復(fù)匹配結(jié)果:在正則中用()添加分組,然后在正則用 \N 來重復(fù)前面第N個分組的匹配結(jié)果

3)捕獲:findall函數(shù)在正則表達式中有分組的時候,只獲取分組匹配到的結(jié)果

2.分支 - |

正則1|正則2|正則3|…

注意:如果是正則的部分要進行分支選擇,需要將部分分支地方加()

四、檢測類符號

1.檢測類符號 - 檢測符號所在的位置是否符合條件(必須是在匹配成功前提下才檢測)

1)單詞邊界 - \b

檢測\b所在的位置是否是單詞邊界。

單詞邊界:凡是可以將兩個單詞區(qū)分開的符號都是單詞邊界,比如:字符串開頭、字符串結(jié)尾、空白字符、標(biāo)點符號

注意:檢測類符號不影響字符串長度

2)檢測字符串開頭 - ^

3)檢測字符串結(jié)尾 - $

五、轉(zhuǎn)義符號

1.轉(zhuǎn)義符號

在正則中本身具備特殊功能灹特殊意義的符號前加’ \ ',讓他的功能消失,變成普通符號

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模塊中常用的函數(shù)及其功能

from re import fullmatch, match, search, findall, finditer, sub, split""" fullmatch(正則, 字符串) - 完全匹配;判斷整個字符串是否正則描述的規(guī)則,如果不滿足結(jié)果是None,滿足返回匹配對象 match(正則, 字符串) - 匹配字符串開頭;如果不匹配返回None,否則返回匹配對象 search(正則, 字符串) - 在整個字符串中查找第一個滿足正則表達式的子串,如果找不到返回None,否則返回匹配對象 findall(正則, 字符串) - 獲取整個字符串中所有滿足正則的子串,返回一個列表 (注意分組問題) finditer(正則, 字符串) - 獲取整個字符串中所有滿足正則的子串,返回一個迭代器,迭代器中的元素是匹配對象 sub(正則, 字符串1, 字符串2) - 將字符串2中所有滿足正則的字串全部替換成字符串1 split(正則, 字符串) - 將字符串中所有滿足正則的子串作為切割點對字符串進行切割 """print(fullmatch(r'\d{3}', '123')) print(match(r'\d{3}', '123阿薩德發(fā)234234asfas')) print(search(r'\d{3}', '阿薩892德發(fā)208asf1023as')) print(findall(r'\d{3}', '阿薩892德發(fā)208asf1023as')) print(findall(r'[a-z](\d{3})', '阿薩892德發(fā)208asf1023as'))str1 = 'how are you? i am fine! thank you! and you?' result = str1.replace('you', 'me') print(result)result = sub(r'you|i', 'me', str1) print(result)str1 = '阿薩892德發(fā)208asf1023as' result = sub(r'\d', '*', str1) print(result)str1 = 'how are you? i am fine! thank you! and you?' print(str1.split('you')) print(split(r'you', str1))str1 = 'hsj+23g-shdf-ahsf-水電費+234' print(split(r'[+-]', str1, 2))

作業(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'

  • 能夠在字符串中匹配"aab",而不能匹配"aaab"和"aaaab"的正則表達式包括(B C )
    A. r"a*?b"
    B. r"a{,2}b"
    C. r"aa??b"
    D. r"aaa??b"
  • 二、編程題

    1.用戶名匹配

    ? 要求: 1.用戶名只能包含數(shù)字 字母 下劃線

    ? 2.不能以數(shù)字開頭

    ? 3.?度在 6 到 16 位范圍內(nèi)

    print(fullmatch(r'[A-Za-z_][0-9A-Za-z_]{5,15}', 'A23456'))
  • 密碼匹配
  • ? 要求: 1.不能包含!@#¥%^&*這些特殊符號

    ? 2.必須以字母開頭

    ? 3.?度在 6 到 12 位范圍內(nèi)

    print(fullmatch(r'[A-Za-z][^!@#¥%^&*]{5,11}', 'A234567'))
  • ipv4 格式的 ip 地址匹配
    提示: IP地址的范圍是 0.0.0.0 - 255.255.255.255
  • 提取用戶輸入數(shù)據(jù)中的數(shù)值 (數(shù)值包括正負數(shù) 還包括整數(shù)和小數(shù)在內(nèi)) 并求和
  • 例如:“-3.14good87nice19bye” =====> -3.14 + 87 + 19 = 102.86 from re import fullmatch, findall result = findall(r'[+-]?\d{1,}\.\d{1,}|[+-]?\d{1,}', '-3.14good87nice19bye') b = [] for x in result:b.append(float(x)) print(sum(b))
  • 驗證輸入內(nèi)容只能是漢字

    from re import fullmatch, findall print(fullmatch(r'[\u4e00-\u9fa5]{1,}', '疾風(fēng)亞索跑得快'))
  • 匹配整數(shù)或者小數(shù)(包括正數(shù)和負數(shù))

    from re import fullmatch, findall re_str = r'[+-]?(\d*|\d*.\d*)' print(fullmatch(re_str, '2.3'))
  • 驗證輸入用戶名和QQ號是否有效并給出對應(yīng)的提示信息

    要求:
    用戶名必須由字母、數(shù)字或下劃線構(gòu)成且長度在6~20個字符之間
    QQ號是5~12的數(shù)字且首位不能為0

  • 拆分長字符串:將一首詩的中的每一句話分別取出來

    ? poem = ‘窗前明月光,疑是地上霜。舉頭望明月,低頭思故鄉(xiāng)?!?/p>

  • 總結(jié)

    以上是生活随笔為你收集整理的day18总结和作业的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。