• 第二篇:正则表达式


    爬虫需要用到正则,python内置了正则re模块

    #!/usr/bin/env python3.5
    # _*_coding:utf-8 _*_
    
    import re
    
    #要匹配对象
    line = "This is a beautiful woman"
    #匹配模式,^表示行首,
    regex_str1 = "^T.*n$"
    regex_str2 = "^t"
    
    if re.match(regex_str1,line):
        print("以T开头,以n结尾")
    
    if re.match(regex_str2,line):
        print("以t开头")

    关于贪婪匹配和懒惰匹配:正则默认匹配模式是贪婪匹配模式:

    line = "AOOOOAOOOABAlfsdf"
    regex_str = ".*(A.*A).*"
    match_obj = re.match(regex_str,line)
    print(match_obj.group(1))

    result:
    ABA

    上面的例子,这种属于贪婪匹配,下面引入? 符号就能看出效果了,?属于懒惰匹配:

    line = "AOOOOAOOOABAlfsdf"
    regex_str = "A.*?A"
    match_obj = re.match(regex_str,line)
    print(match_obj.group())

    result:
    AOOOOA

    没加?的情况:

    line = "AOOOOAOOOABAlfsdf"
    regex_str = "A.*A"
    match_obj = re.match(regex_str,line)
    print(match_obj.group())
    
    result:
    AOOOOAOOOABA

    +前面的字符至少出现一次,下面的子字符串‘AA’就不符合要求了:

    line = "AOOOOAOOOABAlfAAsdf"
    regex_str = ".*(A.+A)"
    match_obj = re.match(regex_str,line)
    print(match_obj.group(1))
    
    result:
    AlfAA

    大括号,限定次数:

    {m}匹配前一个字符m次,{m,n}匹配前一个字符m到n次,省略n则匹配m至无限次,省略m则匹配0至n次

    中括号,指定字符:

    [abc] 匹配abc中的一个,[^a]  匹配除了a以外的一个字符,[0-9] 匹配0到9中的一个

    s 匹配空白字符  S 匹配非空白字符 

    w 匹配单词字符  W 匹配非单词字符

    [u4E00-u9FA5] 匹配汉字:

    line = "abcad大家下午好"
    regex_str = ".*?([u4E00-u9FA5].*)"
    match_obj = re.match(regex_str,line)
    print(match_obj.group(1))
    
    result:
    大家下午好

    d 匹配数字

  • 相关阅读:
    DP(第三版(较简单))
    【テンプレート】洛谷
    【説明する】并查集
    第一篇博文
    cogs 2398 切糕 最小割
    cogs 1873 happiness 最大权闭合子图
    cogs 1274 最小截断 最小割唯一判定
    cogs 736 星际转移 最大流
    cogs 329 K-联赛 最大流
    cogs 2605 寒假ing
  • 原文地址:https://www.cnblogs.com/laonicc/p/7406030.html
Copyright © 2020-2023  润新知