正则表达式

Posted chenprice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

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

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

  在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(rddd,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之间的任意一个数

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

 













































以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

攻破难啃的骨头-正则表达式(转)

正则表达式的贪婪和非贪婪模式