接上个博客:
re.match函数
re.match()
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()
就返回none
。
函数语法:
re.match(匹配的正则表达式, 要匹配的字符串, 可选标志位)
例如:
>>> import re
>>> str = 'www.yuaneuro.cn'
>>> re.match('www',str)
<re.Match object; span=(0, 3), match='www'>
匹配成功re.match
方法返回一个匹配的对象,否则返回None
如果上一步匹配到数据的话,可以使用group()
来提取数据
>>> r = re.match('www',str)
>>> r.group()
'www'
re.search方法
re.search()
扫描整个字符串并返回***第一个成功的匹配***
函数语法:
re.search(匹配的正则表达式, 要匹配的字符串, 可选标志位)
匹配成功re.search
方法返回一个匹配的对象,否则返回None。
如果上一步匹配到数据的话,可以使用group()
来提取数据
例子和上面那个大同小异,那么它俩有什么区别呢?
re.match与re.search的区别
re.match
只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 Nonere.search
匹配整个字符串,直到找到一个匹配。
例如:
import re
str = 'www.yuaneuro.cn'
a = re.match('www', str)
b = re.match('cn', str)
c = re.search('www', str)
d = re.search('cn', str)
print(a)
print(b)
print(c)
print(d)
运行结果:
可以看出使用re.match
匹配cn时开头没有,所以直接返回None
其余的可以用group
方法来提取数据
re.sub函数
Python的re模块提供了re.sub用于替换字符串中的匹配项。
函数语法:
re.sub(pattern, repl, string, count=0, flags=0)
参数:
pattern
: 正则中的模式字符串。repl
: 替换的字符串,也可为一个函数。string
: 要被查找替换的原始字符串。count
: 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。flags
: 编译时用的匹配模式,数字形式。
例如:
import re
str = 'yxxxanerxxxo'
r = re.sub('xxx', 'u', str, 2)
print(r)
运行结果:
yuaneuro
上述例子将str中的xxx
换成了u
且替换了两个
re.compile 函数
compile
函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
函数语法:
re.compile(pattern[, flags])
- 如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配。
例如:
import re
# 编译:
re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
# 使用:
a = re_telephone.match('010-12345').groups()
b = re_telephone.match('010-8086').groups()
print(a)
print(b)
运行结果:
('010', '12345')
('010', '8086')
正则表达式修饰符 - 可选标志
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |