正则表达式

正则表达式可以用于模糊匹配,找东西。

import re
re.findall("yishu","gasghether")
十几个元字符,六个匹配
. 通配符 可以代替任意一个字符,除了/n
r = re.findall("y..u","gasyghuether")
print(r)
^ 以什么开头
r =re.findall("g..y","gasyghuyther")
print(r)
['gasy', 'ghuy']
r =re.findall("^g..y","gasyghuyther")
print(r)
['gasy']
$ 以什么结尾
r= re.findall("t..r$", "gasyghuyther")
['ther']
重复功能 * 匹配离它最近的字符0到无穷次 0次也匹配的上
r = re.findall("d*","fdsgafgfdddddfdfgdg")
print(r) #['', 'd', '', '', '', '', '', '', 'ddddd', '', 'd', '', '', 'd', '', '']
+ 匹配1到无穷次
r = re.findall("d+","fdsgafgfdddddfdfgdg")
print(r) #['d', 'ddddd', 'd', 'd']
?(0,1) 匹配一次或者0次,只有这2个可能
r= re.findall("fd?","fdsgafgfdddddfdfgdg")
print(r)
{}  {0,} == *  {1,} == +  {0,1} == ?  {6} 重复6次  {1,6} 1到6次

上面的都是贪婪匹配,后面加?变成惰性匹配 按照贪婪匹配的最小的匹配
[] 字符集
r= re.findall("www[oldboy baidu]","wwwbaidu")
print(r)
r = re.findall('q[x*b]',"sssferqghgh")  #除了q之外,中括号中必须最少有一个匹配得上。
print(r)  #[]
r = re.findall('q[x*a]',"dfdq*fdg")  # 括号中,除了 /, -, ^,其余均被视为普通字符
print(r)  #['q*']
r= re.findall("q[a-z]","dsafqafdsaqb")  #a-z表示为a-z中所有的都可以进行匹配
print(r)  #['qa', 'qb']
r= re.findall("q[a-z]*","dsafqafdsaqb")
print(r)  #['qafdsaqb']
r = re.findall("q[^a-z]", "q1224")
print(r)  #['q1']
r = re.findall("q[^a-z]", "qfs")
print(r)   #[]
例子  如何运算出12 +(34 * 6 +3 -9 +(2 +4)) 那么首先肯定运算最里面括号的
r = re.findall("\([^ ( ) ]*\)","12 +(34 * 6 +3 -9 +(2 +4))")  #[^()]* 没有括号重复n次
print(r)   #['(2 +4)']
\d \D \s  \S  \w  \W  \b
r =re.findall("www\.baidu","www.baidu")  #.本来是代替任何字符,加\让.没意义
print(r)
print(re.findall('gad{1,5}','gafsdrgadgadddddrtgrh'))

print(re.findall( r"I\b","ave I fgdgI"))   #r是raw string 表示\b是原生字符串,不需要python解释器翻译
print(re.findall("I\\b","dsf I fsdfI"))    #再加个\也是同样的意思,\把\b的特殊意义取消掉
print(re.findall('c\\\\s',"fdsc\sfds"))   #c\\\\s中,\在python解释器有含义,前面2个\\转义\成符号,后面\\是把字符的\转义成符号
print(re.findall(r"(abc)+","abcabcabcabc"))   #['abc']
print(re.search("(?P<name>\w+)","abcccc").group())  #findall找完所有的,search是只要找到有一个满足的,就不往下找
print(re.search("(?P<name>[a-z]+)(?P<age>\d+)","yishu27jessic24").group("age"))   #27 (?P<str>)固定搭配,分组用的

re 的方法
findall  把所有的匹配到的信息放到一个列表中
search.group()  找到的第一个提出来,看信息用group,得到匹配的字符串
match。group()  返回对象,group调取,相当于从第一个开始匹配,只匹配开始的位置
print(re.split(" ","hello abc def"))
print(re.split("[ |]","asdfd fsa|saf"))
print(re.split("[ab]","asdabcd")) #按照a或者b分一次,a分完b也要分  #result = ['', 'sd', '', 'cd']  a的左边没内容 就是空''
print(re.sub("\d+","A","2312gfgf34fdsgs"))  #替换字符串 结果:AgfgfAfdsgs
print(re.subn("\d","A","321gfreg342"))  #('AAAgfregAAA', 6)  替换了6次
comp = re.compile("\d+")  #comp是一个规则
print(comp.findall("432gsd"))  #用规则去找 规则可以用多次,增加效率
ret = re.finditer() 返回的是一个迭代器
next(ret).group()  next(ret)是一个对象,取出结果用group
print(re.findall('www\.(baidu|134)\.com', "www.baidu.com"))  # ['baidu'] findall优先匹配分组括号内的内容
print(re.findall("www\.(?:baidu)\.com","www.baidu.com"))  #?:在括号内是去优先级  结果:['www.baidu.com']
总结
print(re.search("a(bc)|(ty)d","tyd").group())  |或匹配|两边
re.findall("(abc)+", "abcabc")
#输出 abc  ()是分组,findall优先匹配组里面的信息,也就是匹配abc,组里面只有一个abc,输出一个
re.findall("(?:abc)+", "abcabc")
#输出abcabc  #去掉了adc的优先级



阅读更多
个人分类: python
上一篇XML模块
下一篇logging模块
想对作者说点什么? 我来说一句

正则表达式正则表达式

2011年01月10日 15KB 下载

正则表达式

2010年05月21日 97B 下载

正则表达式入门指导.ppt

2011年04月02日 694KB 下载

正则表达式总结文档集合

2009年03月19日 370KB 下载

xml需求文档及正则表达式介绍

2011年05月20日 12.68MB 下载

正则表达式简单课程学习

2011年07月10日 12KB 下载

RegexTester 正则表达式

2018年01月12日 69KB 下载

正则指引书籍

2018年04月23日 30.62MB 下载

没有更多推荐了,返回首页

关闭
关闭