python正则表达式学习

Posted ZendWind

tags:

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

前言

最近在用django作一个功能,主要是为实现机器监控,这个过程中,涉及url识别IP路由问题,一开始用了各种表达方式都无法正确路由到IP,说明自己对这块还是有很多不熟悉的地方,本文主要是针对Python的正则表达式展开介绍,以作备忘。

Python正则介绍

正则匹配

学过Python的都知道,python中有一个正则表达式的模块: re. 正则匹配的模式主要有以下几类:

x?           匹配0个或1个x,最多1个
x+           匹配1个或多个x,至少1个
x*            匹配0个或多个x
x{m,n}     匹配m与n之间个数的x,如{2,4},则可匹配到xx,xxx,xxxx
x|y           匹配x或y
^              匹配文本开头
$              匹配文本结尾
[a-zA-Z]      匹配26个字母的大小写
[^a-zA-Z]    匹配非26个字母的其它字符
[0-9]           匹配0-9之间的所有数字

如果我要匹配一个邮件地址,该怎么做呢,我们先看下下面代码:

import re
 
x="[a-z][email protected][a-z]+.[a-z]+"
 
s1='[email protected]'
s2='liran#devarea.com'
 
c=re.match(x,s1)
if c:
    print ('ok')
else:
    print ('no')

先定义一个模式匹配串[a-z][email protected][a-z]+.[a-z]+, 这个模式串主要含义如下:

匹配一个字母组成的子串,至少1个字母组成 – [a-z]+
匹配一个符号 – @
匹配一个字母组成的子串,至少1个字母组成 – [a-z]+
匹配一个标点 – .
匹配一个字母组成的子串,至少1个字母组成 – [a-z]+

从上面可以看出,其它这个匹配方式是很简单的,可以匹配一些简单模式的邮件,如果邮件中包含数字和大写字母呢,也很简单,只要在匹配中加下数字的匹配就行,如下所示:

x="[a-zA-Z0-9][email protected][a-zA-Z0-9]+.[a-zA-Z0-9]+"

如果要匹配特定后缀的邮件地址要如何呢,也比较简单,直接在模式串最后加特定后缀的子串就行,如我们要匹配.com,net之类的,我们可以如下方式来匹配:

x=[a-zA-Z0-9]+@[a-z0-9]+.(net|com)

还有一些更复杂的方式,如包含一些特殊字符的邮件地址,如下所示:

pattern="^[A-Za-z0-9\.\+_-][email protected][A-Za-z0-9\._-]+\.[a-zA-Z]*$"

除了邮箱地址,我们经常需要去判断如电话号码,IP地址之类的,如下所示:
IP地址

ip="^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"

电话号码

phone = "'(\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]??\d{4}|\d{3}[-\.\s]??\d{4})'"

还有可能是在爬虫时需要去匹配合归的URL链接,如下所示:

url='http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+'

正则查找

在实际Python应用中,我们也经常会用到正则查找功能,如查找文本中第一次出现的数字,可以如下用:

str = 'hello,this is 888, my first regular expression 999 exercise'
m = re.search(r"[0-9]+", str)
if m:
    print('匹配: ',m.group())  #输出: 888

如果要匹配文本中所有数字呢,可以用findall函数,如下所示:

str='hello,this is 888, my first regular expression 999 exercise'
m=re.findall(r"[0-9]+",str)
print m  #输出: ['888','999']

所以用re还是很方便找到想要的子串的。

正则替换

在实际使用中,正则替换也是很常见,用re的sub函数也能很方便解决。

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

python基础学习笔记(十三)

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

第43天python学习re模块学习

Python学习之路-装饰器&生成器&正则表达式

常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)

python正则表达式写[强口令检测]