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.cnblogs.com/wtang/p/10490046.html