首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python基础知识3:re正则表达式

正则表达式(或RE)是一种小型的、高度专业化的编程语言,内嵌在Python中,仅做字符的匹配。

1、字符类型:

普通字符和元字符;

1)普通字符:大多数的字符和字母都会和自身匹配,比如:

t2=re.findall('ahh','yahhkkkgggtngslahh') # 匹配结果['ahh', 'ahh']

2)元字符: . ^ $ * + ? {} [] | () /

.匹配除换行符之外的任意字符

^表示匹配字符串的开始,比如^hello'匹配'helloworld'而不匹配'aaaahellobbb

$表示匹配字符串末尾,可参考^

[]用来匹配一个指定的字符集。

| 或的含义。匹配|左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式

*重复零次或更多次

+重复一次或更多次

?重复零次或一次

重复n次,重复n次或更多次,重复n到m次

\转义字符,后跟元字符,则表示去除特殊功能,\后跟普通字符实现特殊功能,引用序号对应的字组所匹配的字符串,主要有:

\A 只在字符串开始进行匹配

\Z 只在字符串结尾进行匹配

\b 匹配位于开始或结尾的空字符串

\B 匹配不位于开始或结尾的空字符串

\d 相当于[0-9]

\D 相当于[^0-9]

\s 匹配任意空白字符:[\t\n\r\r\v]

\S 匹配任意非空白字符:[^\t\n\r\r\v]

\w 匹配任意数字和字母:[a-zA-Z0-9]

\W 匹配任意非数字和字母:[^a-zA-Z0-9]

案例使用:

案例1:.匹配除换行符之外的任意字符,一个.代表一个字符,多个.代表多个字符

案例2:^必须以字符串开始

案例3:$匹配字符串的结束,必须以字符串结束

案例4:*匹配*前一个字符0次或无限次,比如abc*,可以是ab、abc、abcc、abcccc..等

案例5:+匹配+前一个字符1次或无限次

案例6:?匹配前一个字符0次或1次

案例7:匹配前一个字符m次

案例8:匹配前一个字符m-n次,如果m省略,则指重复0-n次,如果n省略,则指重复m-无限次

案例9:[...]字符集的字符以及转意

字符集可以逐个列出,也可以给出范围如[abc]或[a-c],第一个字符如果是^,则表示取反,如[^abc]表示不是abc的其他字符。所有特殊的字符在字符集中都失去其原有的特殊含义,在字符集中,如果要使用]、-或^,可以在前面加上反斜杠,或把]、-放在第一个字符,把^放在非第一个字符r

其他的转意字符:

\d 匹配任何十进制数:它相当于类[0-9]。

\D 匹配任何非数字字符:它相当于类[^0-9]

\s 匹配任何空白字符:它相当于类[\t\n\r\f\v]

\S 匹配任何非空白字符:它相当于类[^\t\n\r\f\v]

\w匹配任何字母数字字符,它相当于类[a-zA-Z0-9]

\W匹配非任何字母或数字字符,即[^\w]

\b 匹配一个单词边界,也就是指单词和空格间的位置,匹配\w和\W之间,比如一些特殊的字符标点,空格等。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

B [^\b]

案例10:\b想要匹配一个单词I,而不是单词中包含的I

2、主要函数:

match(正则模型, 要匹配的字符串, flags=0),从起始位置开始匹配,匹配成功,则返回一个对象,未匹配成功返回None,和search区别是是否从第一个位置开始。需要配合

search(正则模型, 要匹配的字符串, flags=0,浏览整个字符串去匹配,直到找到一个匹配,未匹配成功返回None

findall(正则模型, 要匹配的字符串, flags=0) 浏览全部字符串,匹配所有合规则的字符串,匹配到的字符串放到一个列表中,未匹配成功返回空列表。匹配成功的字符串,不在参与下次匹配

split(正则模型, 要匹配的字符串, 指定分隔个数, flags=0) 根据正则匹配分割字符串,返回分割后的一个列表

sub(正则模型, 要替换的字符串, 要匹配的字符串, 指定匹配个数, flags=0),替换匹配成功的指定位置字符串。

subn(正则模型, 要替换的字符串, 要匹配的字符串, 指定匹配个数, flags=0),替换匹配成功的指定位置字符串,并且返回替换次数,可以用两个变量分别接收。

re.compile(pattern[, flags]):把正则表达式语法转化成正则表达式对象。flags定义包括:

re.I:忽略大小写

re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境

re.M:多行模式

re.S:’ . ’并且包括换行符在内的任意字符(注意:’ . ’不包括换行符)

re.U: 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库

group,分组是去已经获取的东西里面再去匹配

group() 获取匹配到的所有结果,不管有没有分组将匹配到的全部拿出来,有参取匹配到的第几个如2

groups() 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分的结果

groupdict() 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分定义了key的组结果

案例11:match和group效果

案例12,groups的效果,一旦表达式有()就是分组

案例13,groupdict的效果

案例14,findall+分组

案例15,split+分组

案例16:替换sub

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券