zoukankan      html  css  js  c++  java
  • 正则表达式

      #最近简单学习了爬虫的基础,看到了正则表达式的一点用法,写在这里记录一下。

      很有趣的一句话:如果一个问题可以用正则表达式解决,那么现在就有两个问题了

      在python中正则表达式可以用来按照规则查找字符串,它是用re模块实现的

      1、查找给定字符串

    import re
    print(re.search(r'chen','pricechen'))

    <re.Match object; span=(5, 9), match='chen'>
    #span(范围)是按照序列的顺序给定的,match即为匹配的字符串

      2、通配符

      通配符就是(可以匹配除了换行符以外的所有字符)的字符,在python中通配符为"."

    print(re.search(r'chen...','pricechen123'))
    
    <re.Match object; span=(5, 12), match='chen123'>
    #可以看到这里使用三个"..."匹配了”123“三个字符

    print(re.search(r'ri..ch','pricechen'))
    <re.Match object; span=(1, 7), match='ricech'>
    #这里的".."匹配了字符"ce"

    #通配符"."可以匹配一切字符,那么当需要匹配符号"."时应该怎么办,这里使用"."来匹配
    print(re.search(r'.','pricechen.txt'))
    <re.Match object; span=(9, 10), match='.'>

      3、在python中称拥有特殊能力的符号(比如".")为元字符,""(反斜杠)可以解除元字符的特殊能力,使其变成普通字符,当然,""也可以使得部分普通字符具有特殊能力,比如"d"

    print(re.search(r'ddd','price123chen'))

    <re.Match object; span=(5, 8), match='123'>
    #三个d匹配了三个数字,单个d就会匹配单个数字

      4、字符类匹配,只要字符串中含有待匹配括号中字符,那么就是匹配到了,但是只会匹配第一个字符

    print(re.search(r'[1ce]','price123chen'))
    
    <re.Match object; span=(3, 4), match='c'>

    #还可以用范围来表示需要查找的字符
    print(re.search(r'[3-4]','price3chen'))
    <re.Match object; span=(5, 6), match='3'>

    #其实这里不写中间的"-"也可以匹配,但是仅限于匹配数字的范围

      5、重复匹配字符

    print(re.search(r'e{3}','priceeechen'))
    
    <re.Match object; span=(4, 7), match='eee'>

    #还有一种是表示重复匹配次数的范围
    print(re.search(r'e{2,3}','priceeechen'))

     <re.Match object; span=(4, 7), match='eee'>

      练习

      1、使用正则表达式来匹配数字0~255之间的任意一个数

    我们可能想到使用ddd来匹配,这可以用来匹配三位数
    print(re.search(r'ddd','255'))
    但是两位数或者一位数字就没办法匹配了
    所以,匹配数字范围的方法是:
    。。。
    。。。
    。。。
    。。。
    划重点
    。。。
    。。。
    "[01]{0,1}d{0,1}d|2[04]d|25[05]"
    1、三个或号代表三部分,第一部分"[01]{0,1}d{0,1}d"代表筛选0~199,其中"[01]{0,1}"代表第一位数为0或1,重复的次数为0次或一次(即可能出现也可能不出现)。
     "d{0,1}"代表第二位数字在0~9之间,可能出现也可能不出现,"d"代表第三位数字也在0~9之间,但是一定会出现。
    2、第二部分“2[04]d“代表200~249,"2"代表三位数2是百位,"[04]"代表十位的数在0~4之间,"d"代表个位的数在0~之间。
    3、第三部分"25[05]"代表230~255,"2"代表百位,"5"代表十位,"d"代表个位
    我们将255这个数分为三部分,才能将这个数完整用正则表达式表达出来。

      2、使用正则表达式表达IP地址192.168.1.1

    #首先来看源代码
    print
    (re.search(r'(([01]{0,1}d{0,1}d|2[04]d|25[05]).){3}([01]{0,1}d{0,1}d|2[04]d|25[05])','200.255.1.123'))
    分析:我们将ip地址分为四个部分(192.)(168.)(1.)(1),其中每个部分都在数字0~255之间,但是前面三个部分都是重复的,所以我们将前面三个部分加一个重复值
       就{3}可以了,但是每个部分不仅仅是数字,还有"."符号,因此每个部分里面加上它,就变成([01]{0,1}d{0,1}d|2[04]d|25[05]).){3},第四个部分就是0
       到255之间,我们可以直接在后面加上它,并为其添加括号,最终所得到的正则表达式就是:
       (([01]{0,1}d{0,1}d|2[04]d|25[05]).){3}([01]{0,1}d{0,1}d|2[04]d|25[05])
  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/chenprice/p/10159306.html
Copyright © 2011-2022 走看看