python re库的正则表达式学习笔记

释放双眼,带上耳机,听听看~!

1. 安装

默认已经安装好了python环境了

re库是python3的核心库,不需要pip install,直接import就行

 

2. 最简单的模式

字符本身就是最简单的模式

比如:\'A\', \'I love you\', \'test\'

然是注意在定义模式字符串的时候,在前面加上r,它的作用是告诉编译器,接下来的字符串是单纯的字符串,请不要转变为转义字符

例子

import re
pattern = r\'Cookie\'
sequence = \'Cookie\'
re.match(pattern, sequence)
<re.Match object; span=(0, 6), match=\'Cookie\'>

re.match()是常用的函数,如果匹配,返回的是re.Match object.一个库内置的对象。如果没有匹配返回的是None

 

3. 通配符

在正则表达式中,有些字符是有特殊意义的(不是转义字符的那套规则),下面介绍常用的通配符字符

1)\".\":点,代表任何字符,除了换行(newline)

re.search(r\'Co.k.e\', \'Cookie\').group()

其中group()函数返回匹配的字符,返回类型是str

\'Cookie\'

2) \"\\w\" 反斜杠小写w,代表任何单个字母,数字,下划线

re.search(r\'Co\\wk\\we\', \'Cookie\').group()
\'Cookie\'

3) \"\\W\" 反斜杠大写W,代表任何2)中没有代表的字符

re.search(r\'C\\Wke\', \'C@ke\').group()
\'C@ke\'

4) \"\\s\" 反斜杠小写s,代表一些空格字符,比如空格(space),换行(new line),跳格键(tab),回车(return)

re.search(r\'Eat\\scake\', \'Eat cake\').group()
\'Eat cake\'

5) \"\\S\" 反斜杠大写S,代表任何4)中没有代表的字符

re.search(r\'Cook\\Se\', \'Cookie\').group()
\'Cookie\'

6) \"\\t\" 反斜杠小写t,代表跳格键(tab)

7) \"\\n\" 反斜杠小写t,代表换行(new line)

8) \"\\r\" 反斜杠小写t,代表回车(return)

9) \"\\d\" 反斜杠小写d,代表单个数字0-9

re.search(r\'c\\d\\dkie\', \'c00kie\').group()
\'c00kie\'

10) \"^\" 这个键不知道叫什么,代表从字符开头要匹配

re.search(r\'^Eat\', \'Eat cake\').group()
\'Eat\'

11) \"$\" 美元符号,代表从字符结尾要匹配

re.search(r\'cake$\', \'Eat cake\').group()
\'cake\'

12) \"[abc]\" 中括号中任意字符,代表匹配其中任意字符

常用的方式,比如[a-zA-Z0-9],或者如果中括号中第一个字符是\"^\",代表不是这个范围内的字符

re.search(r\'Number: [0-6]\', \'Number: 5\')
<re.Match object; span=(0, 9), match=\'Number: 5\'>

再来个不在范围内的

re.search(r\'Number: [^0-6]\', \'Number: 7\')
<re.Match object; span=(0, 9), match=\'Number: 7\'>

 

4. 重复

第三部分介绍了单个通配符,那么怎么定义一串通配符呢,利用一些重复的标志

1) \"+\" 加号,表示在它左边的字符出现一次或者多次

re.search(r\'Co+kie\', \'Cooookie\')
<re.Match object; span=(0, 8), match=\'Cooookie\'>

2) \"*\" 乘号,表示在它左边的字符出现零次或者多次

re.search(r\'Ca*o*kie\', \'Caokie\').group()
\'Caokie\'

3) \"?\" 问号,表示在它左边的字符出现零次或者一次

re.search(r\'Colou?r\', \'Color\').group()
\'Color\'

4) {x} 大括号加数字,重复确切几次

5) {x,} 重复至少几次

6) {x, y} 重复至少x次,不超过y次

re.search(r\'\\d{9,10}\', \'0987654321\').group()
\'0987654321\'

 

5. 分组

比如说想定义一个email的格式,@之前的是一个规则,之后的是一个规则,那么通过()圆括号来分为两组,分别定义在一个正则表达式中

然后如果满足的话,通过group()函数指定返回哪一组的结果

比如

email_address = \'Please contact us at: support@datacamp.com\'
match = re.search(r\'([\\w+-]+)@([\\w\\.-]+)\', \'tw7613781@gmail.com\')
if match:
  print(match.group()) # The whole matched text
  print(match.group(1)) # The username (group 1)
  print(match.group(2)) # The host (group 2)
tw7613781@gmail.com
tw7613781
gmail.com

@前为第一部分,\\w代表代表任何单个字母,数字,下划线,上面已经介绍了,然后就是\"\\w\"和\"+\"和\"-\"随便哪一个至少一个或者多个

@后为第二部分,其余一样,就是多了个\"\\.\",因为\".\"代表的是任意字符了,如果想表达真正的点,用\"\\.\"来表示。

 

6. python库函数re的常用函数

1) re.search(pattern, string)和re.match(pattern, string)

区别在于search能从string中寻找任何满足pattern的substring,但是match必须从头开始

pattern = \"cookie\"
sequence = \"Cake and cookie\"

re.search(pattern, sequence).group()
\'cookie\'

如果是match会返回None

2) re.findall(pattern, string)

寻找string所有满足pattern的substring,然后以list的形式返回

email_address = \"Please contact us at: support@datacamp.com, xyz@datacamp.com\"

#\'addresses\' is a list that stores all the possible match
addresses = re.findall(r\'[\\w\\.-]+@[\\w\\.-]+\', email_address)
for address in addresses: 
    print(address)
support@datacamp.com
xyz@datacamp.com

3) re.compile(pattern)

通过compile函数会生成一个pattern对象,这个pattern对象可以直接使用match,search等函数

In: pattern = re.compile(r\"cookie\")
In: pattern
Out: re.compile(r\'cookie\', re.UNICODE)
In: pattern.search(\'cookie\')
Out: <re.Match object; span=(0, 6), match=\'cookie\'>

 

学习材料

https://www.datacamp.com/community/tutorials/python-regular-expression-tutorial

给TA打赏
共{{data.count}}人
人已打赏
经验

asp.net core 将配置文件配置迁移到数据库(一)

2020-11-9 3:36:26

经验

干货 | Java8 新特性教程

2020-11-9 3:36:28

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索