re模块
正则表达式是对字符串进行模糊匹配,字符串的方法是绝对匹配或完全匹配
re用c语言编写的匹配引擎执行,效率高
字符匹配(普通字符,元字符),元字符提供了很多模糊匹配的可能
re模块之元字符:. ^ $ * + ? {} [] | () \ 都是有特殊意义的字符
re.findall(匹配规则,匹配字符)
. ——>通配符,匹配任何一个字符,除了换行符\n
^ ——>尖角号,字符串的开头匹配内容
$ ——>dollar符,字符串的结尾匹配内容
* ——>代表紧挨着的字符0到无穷次重复的次数(0,00)
+——>(1,00)表示1到无穷
?——>(0,1)
{ } ——>可取值代表重复次数,{0,1}==? , {0,}== *,{1,}==+,{6}表示重复六次
[] ——>字符集,只取一个,或的意思,要表示多个加 * + {} ,中括号里没有特殊字符,除了特殊字符 - ^ \ ,其它变成普通字符。[a-z]是a到z的范围,[^a-z]代表非a到z的范围
\ ——>转义符,让有意义的符号变成无意义。无意义的变成有意义
\b ——>匹配一个特殊字符边界,比如空格、&、#等,注:\b在python里是被标识的,在python里 \ 也是转义符
| ——>表示或的意思
() ——>表示分组,结果只会显示组里的内容,(?:)去优先级,显示全部内容
*、+、?匹配方式叫做贪婪匹配,取最多最大的一次,也就是尽可能匹配,后面加?号使其变成惰性匹配即最小匹配
举列:re.findall("\([^()]*\)","12+(34*6+2-5*(2-1)")
re.findall(r"I\b","I am hhj") ——>r表示后面内容不转义
re.findall(r"(abc)+","abcabcabc")
(?P<name>\w+) ——>?P是格式,name是名字
[]与|比较,| 可以或多个字符,[] 只能或一个字符
re.search() ——>只找第一个满足结果,匹配成功返回对象,不成功就什么也不返回,提取值加 .group()
re.match() ——>同search,不过仅在字符串开始处进行匹配,提取值加 .group()
re.split() ——>分割字符串
re.sub() ——>替换,需要三个参数,可再加一个参数(替换次数)
re.subn() ——>返回替换次数
re.compile() ——>编译规则,com=re.compile("\d+")可直接使用com.findall("字符串内容")
re.finditer() ——>返回一个迭代器对象,next(ret).group() ——>取值