Python全栈开发——正则表达式

re模块(正则表达式使用模块)
1.元字符(.,^,$,*,+,?,{},|,(),\)
.   通配符(什么都可以代替,除了换行符)
^   匹配开头
$   匹配结尾
2.重复
*   无穷次重复左边的字母        (0到无穷次)
+    1到无穷次匹配              (左边字符)
?   0到1次匹配                 (左边字符)
{}   自定义匹配重复多少次       (左边字符)
注意:上面的都是贪婪匹配(会匹配最多出现的次数)在后面加 ? 就会变成懒惰匹配

#元字符之字符集[]
#无特殊符号的字符集
import re
print(re.findall('[sdgsd]','gsdh'))   #表或
#['g', 's', 'd']

#有特殊符号(在元字符里)
#    -        范围匹配
print(re.findall('a[a-z]*','hdafhrhr1354'))     #['afhrhr']

#    ^       表非
print(re.findall('[^a-d]','aaaaffart'))        # ['f', 'f', 'r', 't']

#    \       转义

#   |  或
print(re.findall('ka|b','fdkabdv'))         #['ka', 'b']


3.分组  ()
有名分组
(?p<填取的名字>填匹配的正则)

1 print(re.search('\d{5}','dsf24354cxv sf').group())
2 res=re.search('(?P<name>[a-z]+)\d+','alex36ffg')
3 print(res.group())           #alex36

 

1 res=re.search('(?P<name>[a-z]+)\d+','alex36ffg').group('name')
2 print(res)                   #alex


注意:会优先匹配组中内容,去优先级,再组开头加  ?:

 

print(re.findall('www\.(baidu|134)\.com','www.baidu.com')) 
 #['baidu']
print(re.findall('www\.(?:baidu|134)\.com','www.baidu.com'))
 #['www.baidu.com']


4.re常用方法
re.search()         #只找一个匹配结果返回,返回的是一个对象,用group()方法拿到结果
re.findall()        #将所有拿到的结果放在一个列表里面
re.match()          #同search方法,不过只会从开头匹配
re.split()          #分割匹配,结果返回列表 
re.sub()            #匹配后替换 
re.compile()        #写规则
re.finditer()       #得到的结果放在迭代器中

 

 1 print(re.match('\d+','dsg34'))     #None
 2 print(re.match('\d+','3435gd'))     #<re.Match object; span=(0, 4), match='3435'>
 3 print(re.match('\d+','3435gd').group())   #3435
 4 
 5 
 6 print(re.split('[a-z]','gs32dsf24fvg43')) #['', '', '32', '', '', '24', '', '', '43']
 7 
 8 print(re.sub('\d+','luji','fgs23dbg34'))  #fgslujidbgluji
 9 print(re.sub('\d+','luji','fgs23dbg34',1)) #fgslujidbg34
10 
11 
12 com=re.compile('\d+')
13 print(com.findall('fsd34dsfg344g'))  #['34', '344']
14 
15 
16 res=re.finditer('\d','dfg2433fdgb443')
17 print(res)     #<callable_iterator object at 0x00B1CB30>

 

posted @ 2018-09-25 21:46  lujiacheng-python  阅读(131)  评论(0)    收藏  举报