正则表达式


re 模块操作


  • re 模块的使用过程

    1
    2
    3
    4
    5
    6
    7
    8
    9

    # 导入 re 模块
    import re

    # 使用 match 方法进行匹配操作
    result = re.match(正则表达式,要匹配的字符串)

    # 如果上一步匹配到数据的话,可以使用 group 方法来提取数据
    result.group()

    eg:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import re

    result = re.match("hello", "hello world")

    print(result.group()) # hello

    result = re.match("hello1", "hello world")

    print(result.group())
    # AttributeError: 'NoneType' object has no attribute 'group'
  • re.match() 能够匹配出以 xxx 开头的字符串


匹配单字符


正则表达式的单字符匹配

eg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import re

ret = re.match(".", "M")
print(ret.group()) # M

ret = re.match("t.o", "too")
print(ret.group()) # too

ret = re.match("t.o", "two")
print(ret.group()) # two

# 如果 hello 的首字符小写,那么正则表达式需要小写的 h
ret = re.match("h", "hello Python")
print(ret.group()) # h

# 如果 hello 的首字符大写,那么正则表达式需要大写的 H
ret = re.match("H", "Hello Python")
print(ret.group()) # H

# 大小写 h 都可以的情况
ret = re.match("[hH]", "hello Python")
print(ret.group()) # h
ret = re.match("[hH]", "Hello Python")
print(ret.group()) # H
ret = re.match("[hH]ello Python", "Hello Python")
print(ret.group()) # Hello Python

# 匹配 0 到 9 第一种写法
ret = re.match("[0123456789]Hello Python", "7Hello Python")
print(ret.group()) # 7Hello Python

# 匹配 0 到 9 第二种写法
ret = re.match("[0-9]Hello Python","7Hello Python")
print(ret.group()) # 7Hello Python

ret = re.match("[0-35-9]Hello Python","7Hello Python")
print(ret.group()) # 7Hello Python

# 下面这个正则不能够匹配到数字 4,因此 ret 为 None
ret = re.match("[0-35-9]Hello Python","4Hello Python")
print(ret.group()) # AttributeError: 'NoneType' object has no attribute 'group'


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# \d 匹配


import re

ret = re.match("嫦娥 1 号", "嫦娥 1 号发射成功")
print(ret.group())

ret = re.match("嫦娥 2 号", "嫦娥 2 号发射成功")
print(ret.group())

ret = re.match("嫦娥 3 号", "嫦娥 3 号发射成功")
print(ret.group())


# 使用\d 进行匹配
ret = re.match("嫦娥\d号", "嫦娥1号发射成功")
print(ret.group())

ret = re.match("嫦娥\d号", "嫦娥2号发射成功")
print(ret.group())

ret = re.match("嫦娥\d号", "嫦娥3号发射成功")
print(ret.group())

"""
嫦娥 1 号
嫦娥 2 号
嫦娥 3 号
嫦娥1号
嫦娥2号
嫦娥3号

"""

匹配多个字符

匹配多个字符

eg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 匹配 *


import re

ret = re.match("[A-Z][a-z]*", "M")
print(ret.group())

ret = re.match("[A-Z][a-z]*", "MnnM")
print(ret.group())

ret = re.match("[A-Z][a-z]*", "Aabcdef")
print(ret.group())

"""
M
Mnn
Aabcdef

"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 匹配 + 号


import re

ret = re.match("[A-Z]+[a-z]*", "M")
print(ret.group())

ret = re.match("[A-Z]+[a-z]*", "MnnM")
print(ret.group())

ret = re.match("[A-Z]+[a-z]*", "Aabcdef")
print(ret.group())

"""
M
Mnn
Aabcdef

"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 匹配 ?

import re

ret = re.match("[1-9]?[0-9]", "7")
print(ret.group())

ret = re.match("[1-9]?\d", "33")
print(ret.group())

ret = re.match("[1-9]?\d", "09")
print(ret.group())

"""
7
33
0

"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 匹配 {m} 
# 匹配 {m, n}

import re

ret = re.match("[a-zA-Z0-9_]{6}", "12a3g45678")
print(ret.group())

ret = re.match("[a-zA-Z0-9_]{8,20}", "1ad12f23s34455ff66")
print(ret.group())

"""
12a3g4
1ad12f23s34455ff66

"""

匹配开头结尾


匹配开头结尾

eg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 匹配 163.com 邮箱

import re

ret = re.match("[\w]{4,20}@163\.com", "xiaobai@163.com")

print(ret.group()) # xiaobai@163.com

ret = re.match("[1-9]?\d$","09")
# $ 要求是以0匹配的内容结尾,但是它不是以0为结尾

# 只要0到99匹配
ret = re.match("[1-9]?\d$","0")

print(ret.group())
# AttributeError: 'NoneType' object has no attribute 'group'