在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    強(qiáng)烈推薦!Python 這個(gè)寶藏庫(kù) re 正則匹配

    Python 的 re 模塊(Regular Expression 正則表達(dá)式)提供各種正則表達(dá)式的匹配操作。

    在文本解析、復(fù)雜字符串分析和信息提取時(shí)是一個(gè)非常有用的工具,下面總結(jié)了 re 模塊的常用方法。

    一. 預(yù)定義字符

    d 匹配所有的十進(jìn)制數(shù)字 0-9

    D 匹配所有的非數(shù)字,包含下劃線(xiàn)

    s 匹配所有空白字符(空格、TAB等)

    S 匹配所有非空白字符,包含下劃線(xiàn)

    w 匹配所有字母、漢字、數(shù)字 a-z A-Z 0-9

    W 匹配所有非字母、漢字、數(shù)字,包含下劃線(xiàn)

    二. 特殊字符

  • $:匹配一行的結(jié)尾(必須放在正則表達(dá)式最后面)
  • ^:匹配一行的開(kāi)頭(必須放在正則表達(dá)式最前面)
  • *:前面的字符可以出現(xiàn)0次或多次(0~無(wú)限)(貪婪匹配)
  • +:前面的字符可以出現(xiàn)1次或多次(1~無(wú)限)(貪婪匹配)
  • ?:變”貪婪模式”為”勉強(qiáng)模式”,前面的字符可以出現(xiàn)0次或1次(非貪婪匹配)
  • 備注:符號(hào).* 貪婪,符號(hào).*? 非貪婪

  • .:匹配除了換行符””之外的任意單個(gè)字符
  • |:兩項(xiàng)都進(jìn)行匹配
  • [ ]:代表一個(gè)集合,有如下三種情況
  • [abc]:能匹配其中的單個(gè)字符

    [a-z0-9]:能匹配指定范圍的字符,可取反(在最前面加入^)

    [2-9] [1-3]:能夠做組合匹配

    4.{ }:用于標(biāo)記前面的字符出現(xiàn)的頻率,有如下情況:

    {n,m}:代表前面字符最少出現(xiàn)n次,最多出現(xiàn)m次

    {n,}:代表前面字符最少出現(xiàn)n次,最多不受限制

    {,m}:代表前面字符最多出現(xiàn)n次,最少不受限制

    {n}:前面的字符必須出現(xiàn)n次

    三. 反斜杠說(shuō)明

    字符串中有反斜杠的,需要對(duì)反斜杠做轉(zhuǎn)義

    四. 分組

    ():分組字符,可以為匹配到的內(nèi)容分組,快速獲取到分組中的數(shù)據(jù) 在正則里面 “()” 代表的是分組的意思,一個(gè)括號(hào)代表一個(gè)分組,你只能匹配到 “()” 中的內(nèi)容。

    group:用于查看指定分組匹配到的內(nèi)容

    groups:返回一個(gè)元組,組內(nèi)為所有匹配到的內(nèi)容

    groupdict:返回一個(gè)字典,包含分組的鍵值對(duì),需要為分組命名

    五. 常用方法

  • match:在目標(biāo)文本的開(kāi)頭進(jìn)行匹配
  • search:在整個(gè)目標(biāo)文本中進(jìn)行匹配
  • findall:掃描整個(gè)目標(biāo)文本,返回所有與規(guī)則匹配的子串組成的列表,如果沒(méi)有匹配的返回空列表
  • split
  • re.split(pattern, string[, maxsplit=0, flags=0])split(string[, maxsplit=0])

    作用:可以將字符串匹配正則表達(dá)式的部分割開(kāi)并返回一個(gè)列表

    六. 正則表達(dá)式函數(shù)里面的flags參數(shù)說(shuō)明

    flags定義包括:

    re.I:忽略大小寫(xiě)

    re.L:表示特殊字符集 w, W, b, B, s, S 依賴(lài)于當(dāng)前環(huán)境

    re.M:多行模式

    re.S:’.’并且包括換行符在內(nèi)的任意字符(注意:’.’不包括換行符)

    re.U:表示特殊字符集 w, W, b, B, d, D, s, S 依賴(lài)于 Unicode 字符屬性數(shù)據(jù)庫(kù)

    在 Python 中使用正則表達(dá)式之前,先使用以下命令導(dǎo)入 re 模塊

    import re

    示例1:具體使用說(shuō)明

    例如:

    ‘(d)(a)1’ 表示:匹配第一是數(shù)字,第二是字符a,第三 1 必須匹配第一個(gè)一樣的數(shù)字重復(fù)一次,也就是被引用一次。

    如 “9a9” 被匹配,但 “9a8” 不會(huì)被匹配,因?yàn)榈谌坏?1 必須是 9 才可以。

    ‘(d)(a)2’ 表示:匹配第一個(gè)是一個(gè)數(shù)字,第二個(gè)是a,第三個(gè) 2 必須是第二組()中匹配一樣的。

    如 “8aa” 被匹配,但 “8ab”,“7a7” 不會(huì)被匹配,第三位必須是第二組字符的復(fù)制版,也是就引用第二組正則的匹配內(nèi)容。

    print(re.match(r'(w{3}).’,”abceeeabc456abc789″).group())print(re.match(r'(w{3}).*’,”abceeeabc456abc789″).group())#*貪婪匹配print(re.match(r'(w{3}).*?’,”abceeeabc456abc789″).group())#?非貪婪匹配print(re.search(r'(d{3})’,”abceeeabc456abc789″).group())print(re.search(r'(w{3})(d+)(1)’,”abceeeabc456abc789abc”).groups())print(re.search(r'(w{3})(d+)(1)’,”abceeeabc456abc789abc”).group(1))print(re.search(r'(w{3})(d+)(1)’,”abceeeabc456abc789abc”).group(2))print(re.search(r'(w{3})(d+)(1)’,”abceeeabc456abc789abc”).group(3))print(re.search(r'(w{3})(d+)(2)’,”abceeeabcs456456abc456789abc”).groups())print(re.search(r'(w{3})(d+)(2)’,”abceeeabcs456456abc456789abc”).group(1))print(re.search(r'(w{3}).*?(1)’,”abceeeabc456abc789abc”).group(1))print(re.search(r'(w{3}).*?(1)’,”abceeeabc456abc789abc”).group(2))print(re.search(r'(w{3})(.*?)(2)’,”abceeeabc456abc789″).group())print(re.search(r'(w{3}).*?(1)’,”abceeeabc456abc789″).group(1,2))print(re.findall(r’d+’,’one11two22three33four44′))print(re.split(r’W+’,’192.168.1.1′)) #W匹配所有非字母、漢字、數(shù)字,包含下劃線(xiàn),然后處理完成返回一個(gè)列表print(re.split(r'(W+)’,’192.168.1.1′)) #加了括號(hào)后做了分組的處理,.號(hào)也被分割了print(re.split(r'(W+)’,’192.168.1.1′,1)) #加了一個(gè)1這個(gè)參數(shù)后,表示最大分割深度為1str1 = ”’goodjobisgood: testisgood welldone ”’res1 = re.findall(r’good(.*?)done’,str1)# 如果不使用re.S參數(shù),則只在每一行內(nèi)進(jìn)行匹配,如果一行沒(méi)有,就換下一行重新開(kāi)始,不會(huì)跨行。# 而使用re.S參數(shù)以后,正則表達(dá)式會(huì)將這個(gè)字符串作為一個(gè)整體,將“”當(dāng)做一個(gè)普通的字符加入到這個(gè)字符串中,在整體中進(jìn)行匹配。res2 = re.findall(r’good(.*?)done’,str1,re.S)print(res1)print(res2)

    示例2:網(wǎng)頁(yè)信息匹配

    str1 = ‘

    this is a herfgoodjob

    ‘# find = re.search(‘(w+)’, str1)find = re.search(‘.+)”>(?Pw+)’, str1)print(find.groups())print(find.group(1))print(find.group(2))print(find.groupdict())

    示例3:日期匹配

    date1=input(“請(qǐng)輸入年月日:”)result1=re.match(r’^(d{4}-d{1,2}-d{1,2})#39;,date1)print(result1.group())

    示例4:郵箱正則匹配

    re_email = r’^[a-zA-Z0-9_]{0,20}@(163|162|Gmail|yahoo).com’email_address = input(‘請(qǐng)輸入郵箱’)res = re.search(re_email, email_address)print(res)print(email_address)print(type(res))print(res.group())

    示例5:手機(jī)號(hào)匹配

    phone=input(“請(qǐng)輸入手機(jī)號(hào):”)result2=re.match(r’1[35678]d{9}’,phone)print(result2.group())

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶(hù)投稿
    上一篇 2022年6月20日 13:06
    下一篇 2022年6月20日 13:07

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息