Python 正则表达式详细教程

一、简介

正则表达式本身是一种小型的、高度专业化的编程语言,而在Python中,主要集成在re模块,可以通过调用该模块实现正则匹配;该模块主要涵盖了6大函数,下面将围绕该6大函数详细介绍。

二、正则表达式中常用字符含义

三、re模块中常用函数

1、compile

主要用于编译正则表达式,返回一个对象的模式,供 match() 、search() 、findall()等函数使用,语法格式如下:

re.compile(pattern,flags)

参数:

pattern: 一个字符串形式的正则表达式

flags: 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

re.I:忽略大小写

re.M:多行模式

importre

line='Tina is a good girl, she is cool, clever, and so on...'

#用于匹配包含'oo'的单词

pattern=re.compile(r'\w*oo\w*')

#查找所有包含'oo'的单词

print(pattern.findall(line))

执行结果如下:

['good','cool']

2、match

主要从字符串的起始位置匹配一个模式,匹配成功re.match方法返回一个匹配的对象,否则返回None。函数语法如下:

re.match(pattern,string,flags)

参数:

pattern: 匹配的正则表达式

string: 要匹配的字符串

flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、多行匹配等。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

importre

line='Cats are smarter than dogs'

matchObj=re.match(r'(.*) are (.*?) .*',line,re.M|re.I)

ifmatchObj:

print('matchObj.group() : ',matchObj.group())

print('matchObj.group(1) : ',matchObj.group(1))

print('matchObj.group(2) : ',matchObj.group(2))

else:

print('No match!!')

执行结果如下:

matchObj.group():Cats are smarter than dogs

matchObj.group(1):Cats

matchObj.group(2):smarter

3、search

该函数会匹配整个字符串,直到找到第一个匹配然后返回,如果字符串没有匹配,则返回None,函数语法如下:

re.search(pattern,string,flags)

参数:

pattern: 匹配的正则表达式

string: 要匹配的字符串

flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、多行匹配等。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

importre

obj='123abc456'

searchObj=re.search(r'([0-9]*)([a-z]*)([0-9]*)',obj)

ifsearchObj:

print('searchObj.group() : ',searchObj.group())

print('searchObj.group(1) : ',searchObj.group(1))

print('searchObj.group(2) : ',searchObj.group(2))

print('searchObj.group(3) : ',searchObj.group(3))

else:

print('Nothing found!!')

执行结果如下:

searchObj.group():123abc456

searchObj.group(1):123

searchObj.group(2):abc

searchObj.group(3):456

4、findall

该函数在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表,语法格式如下:

注意: match 和 search 是匹配一次 而findall 匹配所有。

re.findall(pattern,string,flags)

参数:

pattern: 匹配的正则表达式

string: 要匹配的字符串

flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、多行匹配等。

importre

info='

baidu

'

#通过正则表达式提取网址

result=re.findall(r'baidu',info)

print(result)

执行结果如下:

['http://www.baidu.com']

5、split

该函数按照匹配的子串将字符串分割后返回列表,使用形式如下:

re.split(pattern,string,maxsplit)

参数:

pattern: 匹配的正则表达式

string: 要匹配的字符串

maxsplit: 分割次数,默认为0,不限次数。

6、sub

该函数用于替换字符串中的匹配项,并返回替换后的字符串,表达形式如下:

re.sub(pattern,repl,string)

参数:

pattern: 匹配的正则表达式

repl: 替换的字符串

string: 被查找替换的原始字符串

importre

phone='2004-800-959 #这是一个国外电话号码'

#删除字符串中的Python注释

num1=re.sub(r'#.*$','',phone)

print(num1)

执行结果如下:

2004-800-959

#删除字符串中的非数字(-)

num2=re.sub(r'\D','',phone)

print(num2)

执行结果如下:

2004800959

此次的正则表达式到这差不多结束了,感谢亲们的支持和关注。

学习与分享,关注小号

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180415G1B52800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券