正则表达式(Regular Experssion)是对字符串操作的一种逻辑公式. 简称regex或re
优点 : 灵活, 功能性强, 逻辑性强
缺点 : 上手难.
工具 : 各大文本编辑器一般都有正则匹配功能,也可以去http://tool.chinaz.com/regex/进⾏行行在线测试.
1. 字符组 [a-zA-Z0-9]
2. 简单元字符(常用)
. 匹配除换行符以外的任意字符 w 匹配字母或数字或下划线 s 匹配任意空白符 d 匹配数字 匹配一个换行符 匹配一个制表符 匹配一个单词的结尾 ^ 匹配字符串的开始 $ 匹配字符串的结尾 W 匹配非字母或数字或下划线 D 匹配非数字 S 匹配非空白符 a|b 匹配字符a或字符b () 匹配括号内的表达式,也表示一个组 [...] 匹配字符组中的字符 [^...]匹配除了字符组中的字符的所有字符
3.量词(一次性匹配多个字符)
* 重复0次或者更多次 + 重复1次或者更多次 ? 重复0次或者1次 {n} 重复n次 {n,} 重复n次或者更多次 {n,m}重复n到m次
4.惰性匹配和贪婪匹配
在量词中的 * , + , {} 都属于贪婪匹配.尽可能匹配到多的结果
.*? 则是尽可能少匹配,表示惰性匹配. 例: .*?x 是找到下一个x位置
5.分组 正则中使用()进行分组.
6. 转义 特殊意义的元字符如 或者s,如果需要匹配对应的字符串,需要对进行转义.由于Python中的特殊字符也需要转义,比较复杂,因此使用 r' '即可,这是只需要正则表达式内部转义即可r'\n' → ' '
re模块
re模块是python提供的一套关于处理正则表达式的模块.核心功能有四个:
1.findall 查找所有.返回list
import re lst = re.findall('a' , 'happy birthday!!') print(lst) #['a', 'a'] lst = re.findall(r'd+' , '5apple6banana') print(lst) #['5', '6']
2.search 会进行匹配.但如果匹配到了第一个结果,就会返回这个结果.如果匹配不到search返回的则是None
ret = re.search('a','happy birthday!!') #<re.Match object; span=(1, 2), match='a'> print(ret) #a
3.match 只能从字符串的开头进行匹配
import re ret = re.match('a','apply apple').group() print(ret) #a
4.finditer 和 findall差不多.只不过返回的是迭代器
import re it = re.finditer('d' , 'apple6 banana7') for el in it: print(el.group(), end=' ') #6 7
5.其他操作
ret = re.split('[ab]', 'qwerafjbcd') # 先按a分割,再按b分割 print(ret) # ['qwer', 'fj', 'cd'] ret = re.sub(r"d+", "_a_", "alex250ta") # 把字符串中的数字换成_a_ print(ret) #alex_a_ta ret = re.subn(r"d+", "_a_", "alex250ta") # 把字符串中的数字换成_a_返回元组包含次数 print(ret) #('alex_a_ta', 1) obj = re.compile(r'd{3}') #将这则表达式编译成正则表达式对象 ret = obj.search('abc123eeee') 匹配字符串 print(ret.group()) #123