re模块称为正则表达式;
作用:创建一个"规则表达式",用于验证和查找符合规则的文本,广泛用于各种搜索引擎、账户密码的验证等;
re.findall(pattern, string, flags=0):在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
- pattern:匹配字符串的正则。
- string :待匹配的字符串。
- flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
import re
result = re.findall(r'\d+','1python2hello3')
print(result)
#########################################
['1', '2', '3']
import re
result = re.findall(r'p%','helloP%ython')
print(result)
####################################
[]
import re
result = re.findall(r'p%','helloP%ython',re.I)
print(result)
#########################################
[P%]
re.sub(pattern, repl, string, count=0, flags=0):创建一个"规则表达式",用于查找替换符合规则的文本
- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
import re
result = re.sub(r'python','world','hellopython')
print(result)
#######################################
helloworld
repl 参数是一个函数
#需求:将匹配到结果中小于4的替换成8,大于4的替换成9
import re
def modify(value):
matched = value.group()
if int(matched) <= 4:
return '8'
else:
return '9'
str = 'ab12cd34ef567'
result = re.sub('\d', modify, str)
print(result )
##############################
ab88cd88ef999
re.compile(pattern[, flags]):
当我们在Python中使用正则表达式时,re模块内部:
1)编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
2)用编译后的正则表达式去匹配字符串。
那么如果一个正则表达式要重复使用几千次,出于效率的考虑,我们是不是应该先把这个正则先预编译好,接下来重复使用时就不再需要编译这个步骤了,直接匹配,提高我们的效率
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
- pattern : 一个字符串形式的正则表达式
- flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,
import re
str = 'ab12cd34ef567'
info = re.compile(r'([a-z]{2})(\d{2})')
result = info.match(str).group()
result1 = info.match(str).groups()
print(result)
print(result1)
################################
ab12
('ab', '12')
re.match(pattern, string, flags=0):尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
- pattern :匹配的正则表达式
- string:要匹配的字符串。
- flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
import re
str = 'ab12cd34ef567'
info = re.compile(r'([a-z]{2})(\d{2})')
result = info.match(str).group()
result1 = info.match(str).groups()
print(result)
print(result1)
########################
ab12
('ab', '12')
re.search(pattern, string, flags=0) : 扫描整个字符串并返回第一个成功的匹配。
- pattern:匹配字符串的正则。
- string :待匹配的字符串。
- flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
import re
str = 'ab12cd34ef567'
info = re.compile(r'([0-9]{2})')
result = info.search(str).group()
print(result)
################################
12
import re
info = re.compile(r'([a-z]{2})(\d{2})')
str1 = '0b12cd34ef567'
result1 = info.match(str1)
print(result1)
#####################
None
re.split(pattern, string[, maxsplit=0, flags=0]):按照能够匹配的子串将字符串分割后返回列表
- pattern: 匹配的正则表达式
- string:要匹配的字符串。
- flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
import re
str = 'abc def g hi'
result = re.split('\W+',str)
print(result)
#######################
['abc', 'def', 'g', 'hi']