正则表达式的介绍与应用(python)
简介
正则表达式是一套用于做字符串的检索的引擎
- 正则表达式起源于Unix
- 正则表达式是一种小型的,高度专业化的编程语言,内嵌在Python的re模块中
- 运行原理:正则表达式会被编译成一系列的字节码,然后由用C编写的匹配引擎执行
- 正则表达式语言相对小型和受限,不是所有的字符串都能用正则表达式
元字符串
- []:
a. 通常用来指定一个字符集合,必须给一个范围
b. 配合^表示取反,[]内的字符全部都不取
c. []内的元字符串,不发生作用,只视为普通字符串 - ^:
a. 匹配行首
b. 取反 - $:
用于匹配行尾 - \:
a. 配合不同的字符产生特殊含义
\w 匹配任何字母数字字符: [0-9a-zA-Z]
\W 同上取反
\d 匹配任何十进制数
\D 同上取反
\s 匹配任何空白字符 : \t \n \f
\S 同上取反
b. 用于转义 - {n}:
重复n次—指定重复次数
所有的辅助型元字符串,只修饰前面的元字符串 - *:
重复:0~多次 - +:
重复: 1~多次 - ?:
a. 重复: 0~1次
b. 非贪婪模式:尽可能少的匹配
默认重复都是贪婪模式:能匹配多少全都要 - {m,n}:
重复: m~n次 - .:
匹配除了换行符以外的所有的字符 - ():
分组,只显示括号内的内容,括号外的元字符也执行了 - |:
或
应用
正则表达式的执行:
1. 直接解释执行
2. 先编译,后解释—效率高
re模块下提供了编译相关方法
compile()—函数,返回一个编译之后的正则对象
通过函数创建一个对象---工厂模式
目的:提高匹配时的执行效率
import re
rule='abc'
re_compile=re.compile(rule) # 创建正则对象---工厂模式
print(re_compile.findall(s))
正则对象的属性和方法re模块
- findall():
找到正则匹配的所的字符串,并打包成列表返回 - match():
匹配行首
如果匹配到对应的字符串,则返回一个Match对象
如果没有匹配到对应的字符串,则返回一个None值
match方法和Match对象无关 - search():
搜索字符串,找到正则对象匹配的对应的下标(位置) - finditer():
将匹配到的所有字符串,打包成迭代器返回
每个元素均为Match对象 - sub(正则,替换的字符串,目标字符串):
替换字符串 - subn():
替换字符串并返回替换的次数 - split():
分割字符串
import re
# 匹配出1-99之间的数字
ret = re.findall("[1-9]?[1-9]", "7777733")
ret1 = re.match("[1-9]?[1-9]", "7777733")
ret2 = re.search("[1-9]?[1-9]", "7777733")
ret3 = re.finditer("[1-9]?[1-9]", "7777733")
ret4 = re.sub("[1-9]?[1-9]", '77', "7777733",)
ret5 = re.subn("[1-9]?[1-9]", '77', "7777733")
print(ret)
print(ret1)
print(ret2)
print(ret3)
print(ret4)
print(ret5)
['77', '77', '73', '3']
<re.Match object; span=(0, 2), match='77'>
<re.Match object; span=(0, 2), match='77'>
<callable_iterator object at 0x000002607054E898>
77777777
('77777777', 4)
Match对象的属性和方法
- group():
返回被RE匹配的字符串 - start():
返回匹配到的字符串的开始下标 - end():
返回匹配到的字符串的结束下标 - span():
返回匹配到的字符串的开始下标和结束下标,打包成元组