码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2018-12-22 01:08:34      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:符号   第一部分   重复   第二部分   就是   应该   特殊   需要   第一个   

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

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

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

  1、查找给定字符串

import re
print(re.search(rchen,pricechen))

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

  2、通配符

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

print(re.search(rchen...,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\d\d\d,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(re{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之间的任意一个数

我们可能想到使用\d\d\d来匹配,这可以用来匹配三位数
print(re.search(r\d\d\d,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])

 

正则表达式

标签:符号   第一部分   重复   第二部分   就是   应该   特殊   需要   第一个   

原文地址:https://www.cnblogs.com/chenprice/p/10159306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!