正则介绍和知识点
用来简洁表达一组字符串的表达式。
编译:将符合正则表达式语法的字符串转换成正则表达式特征
正则表达式语法由字符和操作符构成
re库是Python的标准库 用import re
调用
r'text\f\sdfs[{?'
用此方法来转义字符串
Match对象是一次匹配的结果,包含匹配的很多信息
Re库默认采用贪婪匹配,即输出匹配最长的子串
贪婪匹配和最小匹配 如 r'PY.*N'
和r'PY.*?N'
。用?
只要长度输出可能不同的,都可以通过在操作符后增加?变成最小匹配
常用的操作符
操作符
. 表示任何单个字符
[] 字符集,对单个字符给出取值范围
[^ ] 非字符集,对单个字符给出排除范围
* 前一个字符0次或无限次扩展
+ 前一个字符1次或无限次扩展
? 前一个字符0次或1次扩展
| 左右表达式任意一个
{m} 扩展前一个字符m次
{m,n} 扩展前一个字符m至n次(含n)
^ 匹配字符串开头
$ 匹配字符串结尾
( ) 分组标记,内部只能使用 | 操作符
\d 数字,等价于[0‐9]
\w 单词字符,等价于[A‐Za‐z0‐9_]
经典实例
^[A-Za-z]+$ 26个字母组成的字符串
^[A‐Za‐z0‐9]+$ 26个字母和数字组成的字符串
^‐?\d+$ 整数形式的字符串
^[0‐9]*[1‐9][0‐9]*$ 正整数形式的字符串
[1‐9]\d{5} 境内邮政编码6位
[\u4e00‐\u9fa5] 匹配中文字符
Re库主要功能函数
功能函数
re.search() 在字符串中搜索匹配正则表达式第一个位置,返回match对象
re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
re.splite() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
字符串匹配
import re
s = re.search(r'[1-9]\d{5}','BITfs 1000894654') #匹配后6位数字
if s:
print(s.group(0))
ls = re.findall(r'[1-9]\d{5}','fsfsd100081 fsdfs100084') #以列表的形式匹配
print(ls)
spt = re.split(r'[1-9]\d{5}','fsfs100088 sfsdf100099') #分割字符串
print(spt)
spt_max = re.split(r'[1-9]\d{5}','fsfs100088 sfsdf100099 vxc5464654',maxsplit=1) #最大分割数
print(spt_max)
for m in re.finditer(r'[1-9]\d{5}','fdsgdf5646165 vxcvx3113213 ewrer4461313'): #迭代
if m:
print(m.group(0))
sb = re.sub(r'[1-9]\d{5}',':zipcode','fdsgdf5646165 vxcvx3113213') #替换字符串
print(sb)
运行后
正则的等价用法:
import re
rst = re.search(r'[1-9]\d{5}','fsdf5465465')
if rst:
print(rst.group(0))
print('-'*50)
#re 库的另一种等价用法
#面向对象用法
pat = re.compile(r'[1-9]\d{5}')
rst = pat.search('fsdf5465465') #pat.xxx(string) string表示待匹配的字符串
if rst:
print(rst.group(0))
参数
re.search(pattern, string, flags=0)
re.match(pattern, string, flags=0)
re.findall(pattern, string, flags=0)
re.split(pattern, string, maxsplit=0, flags=0)
re.finditer(pattern, string, flags=0)
re.sub(pattern, repl, string, count=0, flags=0)
regex = re.compile(pattern, flags=0)
↓
pattern : 正则表达式的字符串或原生字符串表示
string : 待匹配字符串
flags : 正则表达式使用时的控制标记
repl : 替换匹配字符串的字符串
count : 匹配的最大替换次数
maxsplit: 最大分割数,剩余部分作为最后一个元素输出
match对象
属性
.string 待匹配的文本
.re 匹配时使用的patter对象(正则表达式)
.pos 正则表达式搜索文本的开始位置
.endpos 正则表达式搜索文本的结束位置
方法
.group(0) 获得匹配后的字符串
.start() 匹配字符串在原始字符串的开始位置
.end() 匹配字符串在原始字符串的结束位置
.span() 返回(.start(), .end())
最小匹配操作符
*? 前一个字符0次或无限次扩展,最小匹配
+? 前一个字符1次或无限次扩展,最小匹配
?? 前一个字符0次或1次扩展,最小匹配
{m,n} 扩展前一个字符m至n次(含n),最小匹配