常见方法
!/usr/bin/python3
# -*- coding: utf-8 -*-
import re
string = '123abc123'
pattern = re.compile('d+')
# result = pattern.match(string) # match 开头匹配, 只匹配一次
# result = pattern.search(string) # search 全局匹配, 只匹配一次
# result = pattern.findall(string) # findall 返回是列表,列表中是所有的匹配结果
result = pattern.finditer(string) # finditer 返回是迭代对象,内部存放了匹配对象
for data in result:
print(data)
# print(result)
findall
把所有的结果匹配完成了才返回,数量小可以使用,但是数据量大不推荐使用
finditer
每匹配一个就返回一个,节省内存,适合数据量大的时候使用
re.compile()
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import re
string = '123abc'
string_list = ["123abc","123abc123"]
# print(re.findall('d+',string))
# pattern = re.compile('d+') #1. 编译生成匹配规则
# print(pattern.findall(string)) # 2. 匹配数据
pattern = re.compile('d+')
for string in string_list:
print(pattern.findall(string))
- re.findall ==> 1. 编译生成匹配规则 2. 匹配数据
会创建上下文环境,吃性能和内存
- re.compile()创建匹配规则,可以重复利用
DOTALL模式
- re.DOTALL == re.S == re.RegexFlag.DOTALL == re.RegexFlag.S
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import re
string = '''
abcd
abcd
'''
pattern = re.compile('a(.*?)d') # 非贪婪 ['bc', 'bc']
pattern = re.compile('a(.*)d') # 贪婪 ['bc', 'bc']
pattern = re.compile('a(.*)d',re.RegexFlag.S) # DOTALL模式 ['bcd
abc']
print(pattern.findall(string))
- (.*) 贪婪模式 -> 尽可能多的匹配
- (.*?) 非贪婪模式 -> 一旦匹配
- . 匹配的除'
'以外所有字符,设置 DOTALL模式,让 . 匹配包括 '
' 所有字符
忽略大小写
- re.IGNORECASE == re.I == re.RegexFlag.IGNORECASE == re.RegexFlag.I
# 多模式共同支持使用 |
pattern = re.compile('a(.*)d',re.DOTALL | re.IGNORECASE)
原始字符串
string = r"ab
cd"
print(string) # "ab
cd"
回退符
string = "abcdef"
print(string) # "abef"