正则表达式

import re

print(re.findall('\w9\w','axsdas9xas,_9xdsas_91')) 
​
#\w,字母数字下划线,中间的必须为9
 

print(re.findall('\W','wgks++++=10==100'))         
​
#\W,非字母数字下划线,和\w 相反
 

print(re.findall('\s','   wangk  ai   aksds   '))       
​
#匹配空格
 

print(re.findall('\S','   wangk  ai   aksds   '))      
​
#匹配非空格
 

print(re.findall('\d',' 232312 a432i4   a6k65sds   '))      
​
#匹配数字
 

print(re.findall('\D',  'wangk 4556 ai34   aksadsds'   ))      
​
#匹配非数字
 

print(re.findall('\n',  'wangk 4556 ai34 \n  aksadsds'   ))      
​
#匹配换行符
 

print(re.findall('\t',  'wangk 4556 ai34  \t aksadsds'   ))      
​
#匹配制表符
 

print(re.findall('^wang',  'wang 4556 ai34  \t aksadsds'   ))      
​
#仅匹配字符串的开头
 

print(re.findall('$wang',  'wang 4556 ai34  \t aksadsds'   ))      
​
#仅匹配字符串的开头
 

print(re.findall('.',  'wang 4556 ai3\n aksadsds'   ))      
​
#匹配任意字符,除换行符
 

print(re.findall('a.g',  'wang 4556 ai3\n aksadsds',re.DOTALL  ))      
​
#匹配a和g中含任意字符
 

print(re.findall('a[n]g',  'wang 4556 ai3\n aksadsds',re.DOTALL  ))     
​
#匹配a和g中含n
 

print(re.findall('a[1-9]g',  'wang 4556 ai3\n aksaa9gdsds',re.DOTALL  ))      
​
#匹配a和g中含1-9的数字
 

print(re.findall('a[^1-9]g',  'wang 4556 ai3\n aksaa9gdsds',re.DOTALL  ))   
​
#匹配除了a和g中含1-9的数字
 

print(re.findall('a[a-zA-Z]g',  'wang 4556 ai3\n aksaa9gdsds',re.DOTALL  ))      
#匹配a和g中大小写字母
 

print(re.findall('a[=+*/-]g',  'wang 4556 ai3\n aksaa-gdsds',re.DOTALL  ))
#匹配a和g且包括[]内的
 

print(re.findall('a[=+*\-/]g',  'wang 4556 ai3\n aksaa-gdsds',re.DOTALL  ))
#匹配a和g中加减乘除,但是减号要放到两边,或者-号前面加上转义符\


print(re.findall('ag',  'wag aG Ag 4556 ai3\n aksadsds',re.I  ))   
#re.I,匹配大小写

print(re.findall('m\\\\e','m\e'))                #\的用法,一个\转义一个\
 

print(re.findall(r'm\\q','m\q'))                      
​
#打印出来的结果多一个\,自动添加转义符
sub
s = 'wang##kai##aksds@@$$$'
print(re.sub('[!#?]','',s))
 



#重复匹配

?:  代表?左边的字符出现0次到一次
​
print(re.findall('ab?','a ab abb abbb a1bb abbbbbb'))  
#只取a0个b到a1个b
​
*: 代表*左边的字符出现0次到无数次# print(re.findall('ab*','a ab abb abbb a1bb abbbbbb'))    
#取a0个b到a无数个b

 +:代表+左边的字符出现1次到无穷次# print(re.findall('ab+','a ab abb abbb a1bb abbbbbb'))          取a1个b到a无数个b

{n,m}:代表{n,m}左边的字符出现n次到m次print(re.findall('ab{1,3}','a ab abb abbb a1bb abbbbbb'))         #取a(n个b)到a(m个b)
 

 print(re.findall('ab{1,}','a ab abb abbb a1bb abbbbbb'))     
​
#取a(n个b)到a(无穷个b)
 

print(re.findall('ab{0,1}','a ab abb abbb a1bb abbbbbb'))         
​
#取a(0个b)到a(1个b)
 

 print(re.findall('ab{,}','a ab abb abbb a1bb abbbbbb'))          
​
#取a(0个b)到a(无穷个b)


#贪婪匹配       .*

print(re.findall('a.*b','a ab abb abbb a1bb abbbbbb'))     
#取a到最远的b的所有值


#非贪婪匹配      .*?

print(re.findall('a.*?b','a ab abb abbb a1bb abbbbbb'))          

#取a到最近的b的所有值
#|:或者

print(re.findall('companies|company','Too many companies have gone bankrupt,c and the next one is my company'))
#取companies或company的所有值
#():分组

# print(re.findall('compan(ies|y)','Too many companies have gone bankrupt,c and the next one is my company'))

#compan依然是判断条件,但是只取括号里面的值,
 

print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt,c and the next one is my company'))

#compan依然是判断条件,但是取所有参与判断的值,

print(re.findall('href="(.*?)"','<p>动感视频</p><a href="https://www.douniwan.com/1.mp4">逗你玩呢</a><a href="https://www.xxx.com/2.mp4">葫芦娃</a>'))

#非贪婪匹配,只取括号的值
 

 print(re.findall('href="(.*)"','<p>动感视频</p><a href="https://www.douniwan.com/1.mp4">逗你玩呢</a><a href="https://www.xxx.com/2.mp4">葫芦娃</a>'))

#贪婪匹配,取匹配成功的第一个到最后一个其间所有的值

    
res=re.search('(href)="(.*?)"','<p>动感视频</p><a href="https://www.douniwan.com/1.mp4">逗你玩呢</a><a href="https://www.xxx.com/2.mp4">葫芦娃</a>')

 print(res)                      #search不产生直接的值,相当于一个生成器,需要用group再次调用

print(res.group(0))             #0代表所有

print(res.group(1))             #1代表分组第一个,第一个括号里的内容

print(res.group(2))           #2代表分组第2个,第二个括号里的内容,索引超过范围会报错
 

res=re.match('abc','123abc')  等介于 res=re.search('^abc','123abc')
 

print(res)          #match代表只从开头查找,相当于findall中的(^)

re.search & re.match

两者都是寻找第一个匹配成功的值,成功则返回一个 match 对象,不成功则返回 None 。不同之处在于 re.match只匹配字符串开头的部分,而 re.search 匹配的则是整个字符串中的字串。

re.findall & re.finditer

re.findall  返回所有匹配成功的对象, re.finditer 返回的是一个迭代器

#re.sub    将匹配的内容进行替换

#re.compile  生成一个pattern 对象,这个对象有匹配,替换,分割字符串的方法

#逃逸字符 \\\\

print(re.findall('alex','alex is alex is alex'))          #匹配模式 

print(re.search('alex','alex is alex is alex'))       #查找模式
##search不产生直接的值,需要用group(数字)再次调用其对应的值

print(re.match('alex','alex is alex is alex'))           #匹配开头模式
#match代表只从开头查找,相当于findall中的(^)上括号
 

 

posted @ 2018-12-06 14:01  Railg-Kai  阅读(237)  评论(0)    收藏  举报