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])
  • 相关阅读:
    批量修改同一种控件属性
    线程池的使用
    金蝶K3常用数据表
    安装更新
    ApexSQL
    c# 计算一个整型数组的平均
    sqlServer基础知识
    c# 获取字符串数组中最长的的字符串并输出最长的字符串
    c# 获取数组中最大数的值
    c# 计算1-100之间的所有质数(素数)的和
  • 原文地址:https://www.cnblogs.com/chenprice/p/10159306.html
Copyright © 2011-2022 走看看