青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 224  文章 - 41  trackbacks - 0
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

享受編程

常用鏈接

留言簿(11)

隨筆分類(159)

隨筆檔案(224)

文章分類(2)

文章檔案(4)

經典c++博客

搜索

  •  

最新評論

閱讀排行榜

評論排行榜


題記

    本文介紹了Python對于正則表達式的支持,包括正則表達式基礎以及Python正則表達式標準庫的完整介紹及使用示例。
    正則表達式在很多的應用中都有使用到,特別是在網絡爬蟲中格式化html后取出自己需要的屬性,在字符串的匹配和查找中也有很多的應用。
    本文主要使用python對正則表達式進行說明,并配合合適的代碼。

如何匹配手機號碼

正則表達式的規則,一開始看的時候,會感覺規則太多太亂,毫無規律可尋,看完了幾個例子以后,慢慢的發現一些常用的表達式以后,寫起后面的規則就容易得多了。
這里以如何匹配手機電話號碼為例子
最簡單的手機規律為11個數字,正則表達式為:
    \d{11}

這樣我們就認為凡事字符串中有11位數字就認為是手機號碼,但是現實中還有另外一些規則,12345678912這也是11個數字,但是我們現在并不會認為他是手機號碼,所以進一步的把規則寫細了。
我們還可以進一步的細分為,13x開頭,14x開頭,17(13678)開頭,18x開頭,后面再帶8位的數字,還有另一種情況是170的情況,其中第四位為[0589]中的一個數,再帶7位數字。
表達式可以寫為:
    (13\d|14[57]|15[^4,\D]|17[13678]|18\d)\d{8}|170[0589]\d{7}

正則表達式語法

我們剛才用到的\d 在正則表達式中,代表著數字的意思,還可以用[0-9]來表示一個數字。語法比較多,但是常用的并不是很多,圖中表示的是常見的語法。
字符串匹配:

| 語法        | 含義    | 
| --------   | :-----:   | 
| \d        | 數字      | 
| \D        | 非數字      |
| \s        | 空白符      |
| \S        | 非空白符      |
| \w        | 單詞字符      |
| \W        | 非單詞字符      |

數量匹配:

| 語法        | 含義    | 
| --------   | :-----:   | 
| *        | 匹配前面字符0次到無限次       | 
| +        | 匹配前面字符1次到無限次       |
| ?        | 匹配前面字符0到1次      |
|{m}        | 匹配前面字符m次      |
| {m,n}        | 匹配前面字符m到n次      |
匹配邊界:
| 語法        | 含義    | 
| --------   | :-----:   | 
| ^       | 匹配字符串開頭       | 
| $        | 匹配字符串末尾       |

圖中的表達式都有專門的例子介紹,可以大概的看看,需要用到的時候在專門來進行查詢。

python中的re模塊

在python中,有專門的模塊來負責正則表達式,就是re模塊。

字符串是否匹配規則

比如在用戶注冊里,我們要求用戶輸入的手機號碼,符合手機號碼的規律,可以用正則表達式來限制。
查看字符串中
是否有符合要求的字符串,還是以剛才的手機號碼為例:
    import re
    str = '15259340987'
    # 將正則表達式編譯成Pattern對象
    pattern = re.compile('152\d{8}')
    # 使用Pattern匹配文本,獲得匹配結果,無法匹配時將返回None
    match = pattern.match(str)
    if match:
        # 使用Match獲得分組信息
        print match.group()

這里可以看出正則表達式,用的是
    re.compile('152\d{8}')
這個表達式比
    (13\d|14[57]|15[^4,\D]|17[13678]|18\d)\d{8}|170[0589]\d{7}
是嚴格非常多的,他只匹配,152開頭的手機號碼,當然表達式可以根據你自己的需要來選擇,這里只是給一個實例。

找出所有符合規則的字符串


在網頁爬蟲中,我們需要找出網頁的說有鏈接,用正則匹配就非常容易做到,查看網頁源代碼中的html,帶有網頁鏈接的代碼為
    href="http://tech.sina.com.cn/t/2017-08-17/doc-ifykcppx8531845.shtml"
正則表達式可以寫成:
    href="(.*?)"
python代碼為:
    import re
    str = ''
    # 匹配
    links = re.findall('href="(.*?)"', str)
    for link in links:
        print link
    # 輸出為: 
    # http://tech.sina.com.cn/t/2017-08-17/doc-ifykcppx8531845.shtml

找出了所有需要的鏈接。

re模塊中重要的接口

  • re.compile(pattern, flags=0)
    這個方法是Pattern類的工廠方法,用于將字符串形式的正則表達式編譯為Pattern對象。 第二個參數flag是匹配模式,取值可以使用按位或運算符'|'表示同時生效,比如re.I | re.M。另外,你也可以在regex字符串中指定模式,比如re.compile('pattern', re.I | re.M)與re.compile('(?im)pattern')是等價的。 
    語句
prog = re.compile(pattern)
result = prog.match(string)
result = re.match(pattern, string)
    等價,第二種寫法較為方便。
  • re.search(pattern, string, flags=0)
    這個方法用于查找字符串中可以匹配成功的子串。從string的pos下標處起嘗試匹配pattern,如果pattern結束時仍可匹配,則返回一個Match對象;若無法匹配,則將pos加1后重新嘗試匹配;直到pos=endpos時仍無法匹配則返回None。 
pos和endpos的默認值分別為0和len(string));re.search()無法指定這兩個參數,參數flags用于編譯pattern時指定匹配模式。 
  • re.match(pattern, string, flags=0)
    這個方法將從string的pos下標處起嘗試匹配pattern;如果pattern結束時仍可匹配,則返回一個Match對象;如果匹配過程中pattern無法匹配,或者匹配未結束就已到達endpos,則返回None。 
pos和endpos的默認值分別為0和len(string);re.match()無法指定這兩個參數,參數flags用于編譯pattern時指定匹配模式。 
注意:這個方法并不是完全匹配。當pattern結束時若string還有剩余字符,仍然視為成功。想要完全匹配,可以在表達式末尾加上邊界匹配符'$'。 
  • re.split(pattern, string, maxsplit=0, flags=0)
按照能夠匹配的子串將string分割后返回列表。maxsplit用于指定最大分割次數,不指定將全部分割。 
  • re.findall(pattern, string, flags=0)
搜索string,以列表形式返回全部能匹配的子串。 
  • re.sub(pattern, repl, string, count=0, flags=0)
    使用repl替換string中每一個匹配的子串后返回替換后的字符串。 
當repl是一個字符串時,可以使用\id或\g<id>、\g<name>引用分組,但不能使用編號0。 
當repl是一個方法時,這個方法應當只接受一個參數(Match對象),并返回一個字符串用于替換(返回的字符串中不能再引用分組)。 
count用于指定最多替換次數,不指定時全部替換。 

常用的正則表達式語句

  • 匹配郵箱:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
  • 匹配中文:[\u4e00-\u9fa5]
  • 匹配IP(IPV4):(\d+)\.(\d+)\.(\d+)\.(\d+)
  • 匹配身份證:\d{15}|\d{17}[0-9Xx]
  • 匹配手機號:(13\d|14[57]|15[^4,\D]|17[13678]|18\d)\d{8}|170[0589]\d{7}

正則表達式工具

正則表達式語法比較復雜,開始沒有經驗的話,調試起來比較麻煩,現在網上有很多的正則表達式工具,能幫助我們快速的進行試驗。有客戶端的工具也有web工具,用起來都較為方便。
用的較多的是RegexBuddy這一款工具,如圖,他可以自動的生成各種語言版本的正則表達式的例子:
如下
更多入門教程可以參考:http://www.bugingcode.com/python_start/
posted on 2018-01-12 15:13 漂漂 閱讀(233) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区三区免费视频| 国产精品久久久久久亚洲毛片| 欧美影院一区| 亚洲欧美经典视频| 午夜精品久久久久久久蜜桃app | 老牛影视一区二区三区| 麻豆久久婷婷| 欧美日韩一区二区免费在线观看| 国产精品啊啊啊| 国产一区二区三区av电影| 亚洲第一福利视频| 9久re热视频在线精品| 亚洲在线免费视频| 美国成人毛片| 99香蕉国产精品偷在线观看| 亚洲欧美日韩精品在线| 老司机67194精品线观看| 欧美日韩在线大尺度| 精品69视频一区二区三区| 亚洲日本一区二区三区| 欧美专区亚洲专区| 亚洲国产精品一区制服丝袜| 99精品国产福利在线观看免费 | 欧美一区二区私人影院日本| 另类激情亚洲| 一区二区三区日韩| 麻豆成人在线观看| 亚洲第一主播视频| 亚洲精品中文字| 久久超碰97中文字幕| 亚洲电影网站| 欧美一级专区| 欧美性猛交xxxx乱大交退制版| 国产日韩欧美在线播放不卡| 亚洲欧洲日本mm| 久久er99精品| 亚洲日本成人在线观看| 欧美一区激情| 欧美日韩一区二区视频在线观看| 国产精品午夜在线观看| 亚洲高清不卡在线观看| 久久国产色av| 亚洲夜晚福利在线观看| 欧美日韩中文字幕日韩欧美| 亚洲人屁股眼子交8| 老司机亚洲精品| 久久国产日韩| 韩国在线一区| 久久久www| 欧美亚洲一区二区在线| 国产精品卡一卡二卡三| 亚洲一区欧美一区| 亚洲美女在线看| 欧美日韩一区二区三| av成人手机在线| 91久久综合亚洲鲁鲁五月天| 久热成人在线视频| 亚洲福利视频网站| 欧美黄色成人网| 欧美激情第二页| 99亚洲伊人久久精品影院红桃| 亚洲国产精品传媒在线观看| 免费的成人av| 日韩视频永久免费观看| 91久久精品一区二区别| 欧美日韩国产在线一区| 亚洲一区二区四区| 亚洲一级在线观看| 国产人妖伪娘一区91| 久久免费99精品久久久久久| 久久精品人人做人人综合| 在线免费一区三区| 亚洲人成网站色ww在线| 欧美日韩中文字幕在线| 欧美一区亚洲一区| 久久精品国产免费| 亚洲人成在线免费观看| 99re6热在线精品视频播放速度| 欧美亚洲成人精品| 久久精品视频网| 美女脱光内衣内裤视频久久网站| 亚洲欧洲视频在线| 一区二区欧美国产| 国产欧亚日韩视频| 欧美aⅴ一区二区三区视频| 亚洲精品一区二| 国产欧美一区二区精品忘忧草 | 快播亚洲色图| 99视频精品免费观看| 亚洲欧美久久久久一区二区三区| 国产亚洲欧美激情| 亚洲国产日韩欧美综合久久| 国产精品男女猛烈高潮激情| 毛片一区二区三区| 欧美四级在线观看| 狼人天天伊人久久| 国产精品久久久久久久电影| 欧美99在线视频观看| 国产精品久久久久毛片软件 | 亚洲视频在线观看网站| 在线播放精品| 亚洲午夜伦理| 日韩午夜在线视频| 久久久久久网站| 欧美一级成年大片在线观看| 欧美jizz19性欧美| 久久精品国产一区二区三区| 欧美日韩高清在线观看| 久久中文在线| 国产精品美女久久久久久免费| 蜜臀91精品一区二区三区| 国产精品欧美日韩| 日韩视频免费观看| 亚洲国产岛国毛片在线| 欧美一区二视频| 亚洲综合视频1区| 欧美理论在线| 亚洲国产日韩美| 亚洲国产毛片完整版| 久久精品在线观看| 久久久久成人精品免费播放动漫| 国产精品久久久久aaaa九色| 亚洲人线精品午夜| 亚洲免费av观看| 欧美国产第一页| 亚洲国产高清在线观看视频| 亚洲高清在线播放| 久久综合一区二区| 欧美激情第10页| 亚洲精品国产精品久久清纯直播| 久久久久久久久岛国免费| 久久精品在线观看| 国产欧美大片| 午夜久久tv| 久久免费视频在线| 精品粉嫩aⅴ一区二区三区四区| 欧美中文在线观看国产| 久久久久久国产精品一区| 国产婷婷精品| 欧美在线视频在线播放完整版免费观看| 午夜精品久久久久久久男人的天堂| 欧美日韩国产综合久久| 亚洲最新色图| 欧美在线免费观看亚洲| 国产一区二区精品久久91| 欧美专区亚洲专区| 欧美成人嫩草网站| 99热在这里有精品免费| 欧美日韩一区二区在线观看| 亚洲男女毛片无遮挡| 欧美区在线播放| 亚洲在线视频观看| 久久深夜福利免费观看| 亚洲国产精品va在看黑人| 欧美国产日韩精品| 亚洲婷婷综合久久一本伊一区| 欧美中文字幕在线观看| 亚洲丁香婷深爱综合| 欧美日韩中文字幕精品| 亚洲欧美一区二区三区久久| 久久久欧美一区二区| 亚洲娇小video精品| 欧美日韩综合| 久久精品网址| av成人毛片| 美女啪啪无遮挡免费久久网站| 亚洲日本电影在线| 国产女人精品视频| 欧美黄色成人网| 欧美亚洲视频| 亚洲日本久久| 久久免费的精品国产v∧| 夜夜爽www精品| 亚洲成色精品| 国产女人18毛片水18精品| 欧美激情精品久久久久久黑人| 亚洲欧美日韩天堂| 亚洲人被黑人高潮完整版| 久久精品最新地址| 亚洲天堂av电影| 亚洲国产一区二区三区在线播 | 亚洲欧美中文在线视频| 在线欧美日韩精品| 国产精品国产三级国产专区53 | 欧美大尺度在线观看| 性欧美1819性猛交| 亚洲毛片网站| 欧美高清视频| 裸体丰满少妇做受久久99精品 | 一本大道久久精品懂色aⅴ| 国产综合网站| 国产欧美 在线欧美| 欧美视频中文字幕在线| 免费av成人在线| 欧美一区二区三区在| 中国成人在线视频| 99精品国产在热久久| 91久久国产综合久久| 欧美黄免费看| 欧美大胆人体视频|