正则表达式 简介
regular expression ,regex,RE
正则表达式是用来简洁表达一组字符串的表达式。
优势:简洁
例如:
‘py’ ‘pyy’ ‘pyyy’ ‘pyyyy’ … ‘pyyyy…’ ----> py+
‘py’开头,后续存在不多于10个字符,后续字符不能是‘p’或‘y’ -----> py[^py]{0,10}
通用字符串表达框架
简洁表达一组字符串的表达式
针对字符串表达“简洁”和“特征”思想的工具
用来判断某字符串的特征归属
应用:
表达文本类型的特征(病毒、入侵等)
同时查找或替换一组字符串
匹配字符串的全部或部分区域
主要应用在字符串匹配
正则表达式的使用
编译:将符合正则表达式语法的字符串转换成正则表达式特征 p=re.compile(regex) 编译后与原本的表达式一致
正则表达式的语法
例子:
Re库的基本使用
Re库是python的标准库(不需要另外安装),主要用来字符串匹配
import re
调用
raw string类型(原生字符串类型(不包含转义符的字符串),只需要在字符串的表式前加一个r就行)
表示为 r’text’
例如:r’[1-9]\d{5}’
string 类型更繁琐 \\来表达正则表达式中的\
当正则表达式包含转义符时,使用raw string来表示正则表达式
re库常用的功能函数
1.re.search(pattern,string,flags=0)
在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
pattern:正则表达式的字符串或原生字符串表示
string:待匹配字符串
flags:正则表达式使用时的控制标记
例:匹配邮政编码
import re
#中国地区编码
match = re.search(r'[1-9]\d{5}','BIT 100081')
if match:
print(match.group(0))
2.re.match(pattern,string,flags=0)
从一个字符串的开始位置起匹配正则表达式,返回match对象
参数同re.search()的参数
例:
3. re.findall(pattern,string,flags=0)
搜索字符串,以列表类型返回全部能匹配的字符串
参数同re.search()的参数
4. re.split(pattern,string,maxsplit=0,flags=0)
maxsplit:最大分割数,剩余部分作为最后一个元素输出
5. re.finditer(pattern,string,flags=0)
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
6. re.sub(pattern,repl,string,count=0,flags=0)
在一个字符串中替换所有匹配正则表达式的字串,返回替换后的字符串。
repl:替换匹配字符串的字符串
count:匹配的最大替换次数
7. regex = re.compile(pattern,flags=0)
将正则表达式的字符串形式编译成正则表达式对象
regex.search()等六个函数都可以这样调用,去掉正则表达式对象
match对象
程序内部认为只有经过compile编译的正则表达式才算一个正则表达式,未经过编译只是正则表达式的一种表达形式。
Match对象的属性:
m = re.search(r'[1-9]\d{5}','BIT100081 TSU100084')
m.string
m.re
表示m是从第0个位置开始搜索,搜索到第19个位置结束
match对象的方法:
使用:
Re库的贪婪匹配和最小匹配
问题引入:
match = re.search(r’PY.*N’,‘PYANBNCNDN’)
match.group(0)
同时匹配长短不同的多项,返回哪一个?
贪婪匹配(re库默认)
输出最长匹配的字符串
即输出‘PYANBNCNDN’
最小匹配
输出最短的字串
match = re.search(r’PY.*?N’,‘PYANBNCNDN’)
match.group(0)
‘PYAN’
对操作符进行扩展
通过在符号后加?获得最小匹配的结果。