regex_lst = [
('字符组',),
('非打印字符',),
('特殊字符',),
('定位符',),
('限定符',),
('re模块',),
('分组命名',),
('或匹配',),
('贪婪匹配与惰性匹配',),
]
字符组
[0-9]
[a-z]
[A-Z]
[^a]
非打印字符
w 匹配字母,数字,下划线 word
s 匹配空字符 space
d 匹配数字 digit
特殊字符
. 匹配除换行符 n 之外的任何单字符
定位符
^ 匹配字符串的开始位置
$ 匹配字符串的结尾位置
限定符
* 0次或多次
1次或多次
? 0次或1次
{n} n次
{n,} n次或多次
{n,m} n次至m次
re模块
re_lst = [
('re.compile(regex)',),
('re.findall(pattern, str)',),
('re.finditer(pattern, str)',),
('re.search(pattern, str)',),
]
re.compile(regex)
代码语言:javascript复制1 import re
2
3 """
4 re.compile(regex)
5 编译一个正则表达式模式,返回一个模式对象
6 """
7 regex = r'[a-z]'
8 pattern = re.compile(regex)
re.findall(pattern, str)
代码语言:javascript复制 1 import re
2
3 """
4 re.findall(pattern, str)
5 返回所有满足匹配条件的结果,并放到列表中
6 """
7 regex = r'[a-zA-Z] '
8 s = 'Hello Python'
9 pattern = re.compile(regex)
10
11 lst = re.findall(pattern, s)
12 print(lst) # ['Hello', 'Python']
re.finditer(pattern, str)
代码语言:javascript复制 1 import re
2
3 """
4 re.finditer(pattern, str)
5 返回迭代器
6 迭代器中每一个元素需要调用group(),得到结果
7 """
8 regex = r'[a-zA-Z] '
9 s = 'Hello Python'
10 pattern = re.compile(regex)
11
12 iterator = re.finditer(pattern, s)
13
14 print(iterator) # <callable_iterator object at 0x000001FDB3F29BE0>
15
16 for i in iterator:
17 print(i.group())
re.search(pattern, str)
代码语言:javascript复制 1 import re
2
3 """
4 re.search(pattern, str)
5 返回满足匹配条件的第一个结果对象
6 """
7 regex = r'[a-zA-Z] '
8 s = 'Hello Python'
9 pattern = re.compile(regex)
10
11 obj = re.search(pattern, s)
12
13 if obj:
14 print(obj.group())
分组命名
代码语言:javascript复制 1 import re
2
3 """
4 flags
5 re.I 忽略大小写
6 re.M 多行模式,改变^和$的行为
7 re.S .可以匹配任意字符,包括换行符
8 """
9 regex = r'<dd>.*?title="(?P<title>.*?)".*?</dd>'
10 s = '<dd><a href="#" title="Python中的正则">...</a></dd>'
11 pattern = re.compile(regex, re.S)
12
13 iterator = re.finditer(pattern, s)
14
15 for i in iterator:
16 print(i.group('title'))
或匹配
代码语言:javascript复制 1 import re
2
3 """
4 取消分组
5 (?:)
6 或匹配
7 long|short
8 """
9 regex = r'www.(?:page|hopen).com'
10 s = 'www.hopen.com'
11 pattern = re.compile(regex)
12
13 iterator = re.finditer(pattern, s)
14
15 for i in iterator:
16 print(i.group())
贪婪匹配与惰性匹配
代码语言:javascript复制 1 import re
2
3
4 def get_data(regex, s):
5 pattern = re.compile(regex)
6 obj = re.search(pattern, s)
7 if obj:
8 return obj.group()
9
10
11 # 贪婪匹配
12 regex_greedy = r'<.*>'
13 # 惰性匹配
14 regex_lazy = r'<.*?>'
15 content = '<a href="#">...</a>'
16
17 ret_1 = get_data(regex_greedy, content)
18 ret_2 = get_data(regex_lazy, content)
19 print(ret_1) # <a href="">...</a>
20 print(ret_2) # <a href="">