侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

python学习2正则表达

2023-12-17 星期日 / 0 评论 / 0 点赞 / 122 阅读 / 5340 字

匹配ip地址 参考 http://blog.chinaunix.net/uid-108431-id-3350731.html http://blog.csdn.net/liangyuannao/art

匹配ip地址

参考 http://blog.chinaunix.net/uid-108431-id-3350731.html

http://blog.csdn.net/liangyuannao/article/details/8755325

第一步:地址分析,正则初判 

  1. 1、0-9 /d 进行匹配
  2. 2、10-99 [1-9]/d 进行匹配
  3. 2、100-199 1/d/d 进行匹配
  4. 3、200-249 2[0-4]/d 进行匹配
  5. 4、250-255 25[0-5] 进行匹配
  1. 基本表达式可以合并为:       /d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5]
  2. 前三部分正则表达式合并为:   ((/d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5])/.){3}
  3. 前三部分加上最后一部分合并为:((/d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5])/.){3}(/d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5])

第三步:进一步合并

 

可以进一步合并为:

r = r'((([1-9]?|1/d)/d|2([0-4]/d|5[0-5]))/.){3}(([1-9]?|1/d)/d|2([0-4]/d|5[0-5]))'

经过测试发现ip地址带有别的字符串过滤会有问题

经改后为

r='((?:(?:(?:[1-9]?|1/d)/d|2(?:[0-4]/d|5[0-5]))/.){3}(?:[2-9]|(?:[1-9]|1/d)/d|2(?:[0-4]/d|5[0-4])))/D'

re.findall(r,s)

注意:

  1. 该正则表达式有两个缺陷:
  2. 0.0.0.0不能判断
  3. 255.255.255.255不能正确判断
  4. 这个问题需要使用其他代码进行辅助解决

内建函数,

abs()取绝对值 max()min()

divmod(x,y) 返回求模后的商和余数 callable(函数)判断函数是否可被调用

isinstance(x,y)判断类型

str.capitalize() 字符串首字母大写

str.replace() 字符串替换 这个是具体替换,模糊替换查看sub()

string.replace(s,old,new)需要导入string模块

filter(函数,序列)函数作用于序列,可用于序列过滤

正则表达

r1 = r"/d{3,4}-?"

编译正则表达为对象

re_tel=re.compile(r1)

这样就可以当做对象进行调用re的方法

re_tel.findall('字符串')返回列表

匹配不区分大小写

re_tel=re.compile(r1,re.I)re.I 调用re的属性表示不区分大小写

match()匹配的对象是否在字符串的开始位置,返回一个对象,一般可以把返回值给一个变量,看这个变量是否为none,

search() 匹配字符串无论在任何位置,也是返回对象

finditer()  匹配后返回一个对象可迭代器,可以通过next()方法查看,其返回也是一个对象,若果想看到其值,就可以掉用方法group()

类似于group()的方法还有

start() 返回匹配开始的的位置

end 返回匹配结束的位置

span 返回一个元祖,包含(开始,结束)

sub是截取字符串,但是支持多个分隔符

sub(正则,'替换对象',原始字符串) 这个是模糊替换

re.split(正则,字符串)支持多个分隔符,且支持正则表达

r1=r"[/+/-/*]"

re.split(r1,s)以+,_,*,三个字符串作为分隔符

正则表达里面经常用到的属性

re.S 使 .  匹配包含换行在内的所有字符 re.findall(r1,字符串,re.S)

re.I 使匹配不区分大小写

re.M 多行匹配,影响^ 和$,同时多行的匹配,如果正则表达式是多行的话,也要加这个属性

re.X能够使用REs的verbose状态是指被组织的更清晰易懂

正则表达式分组

email = r "/w{3}@/w+(/.com|/.cn)"

re.match(email,'[email protected]') 匹配到了会返回一个对象

re.findall(email,[email protected]) 返回的是匹配到的分组字符串[.com]

如果我们有一个字符串s=''' sdf hello sun=westos t43

                                          wefs sun=no t43 sdf

                                          hello  sun=ni  t43 sddsf'''

r1=r"hello sun=.+ t43"

re.findall(r1,s) 返回的匹配到的所有数据 ['hello sun=westos t43','hello sun=ni t43']

如果我们做分组处理

r1=r"hello sun=(.+) t43"

re.findall(r1,s) 返回的优先是分组中的数据,就是匹配到分组的数据 ['westos','ni']      

match也可以匹配      

这个可以用到网络的爬虫,获取我们想获取的url或者ip                          

 

 

广告 广告

评论区