re模块方法的常规操作

一、概念:利用一些特定的匹配规则从字符串或者文本中找需要的内容

import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('三(.{2})',s)
print(res)
===>千尺
import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('三.{2}',s)
print(res)
===>三千尺

二、re常用匹配方法

1、^ 从开头找

import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('^疑是',s)
print(res)
==》None

+++++++
import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('^飞流',s)
print(res)
==》['飞流']

2、$默认是结尾

import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('飞流$',s)
print(res)
==》[]

+++++++++++++++++
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('天$',s)
print(res)
==》['天']

3、| 相当于or

import re
s="飞流直下三千尺,疑是银河落九天"
res=re.findall('飞流|疑是',s)
print(res)
===》['飞流', '疑是']

4、[a,b,c] 只要包含列表中的元素都找出来[a-zA-Z]

s="abdadkjwqbdkqbabdjaj"
res=re.findall('[a,b,c]',s)
print(res)
====>['a', 'b', 'a', 'b', 'b', 'a', 'b', 'a']

5、.{num} 匹配到num个字符

s="abdadkjwqbdkqbabdjaj"
res=re.findall('ad.{2}',s)
print(res)
====>['adkj']

6、* 匹配0个及0个以上

a="aabcbcbcbadaf"
res=re.findall('a*',a)
print(res)
===>['aa', '', '', '', '', '', '', '', 'a', '', 'a', '', '']

7、+ 匹配至少有一个af

s="afafefafef"
res=re.findall('af+',s)
print(res)
===>['af', 'af', 'af']

s="afffafefafef"
res=re.findall('af+',s)
print(res)
====>['afff', 'af', 'af']

8、? 匹配0个或者多个

['d', '', '', '', '', '', '', '', '']

9、\d 匹配数字

s="Awfagwega131fsf233gs"
res=re.findall('\d',s)
==>['1', '3', '1', '2', '3', '3']

10、\D 除了数字

s="Awfagwega131fs#$@f233gs"
res=re.findall('\D',s)
==>['A', 'w', 'f', 'a', 'g', 'w', 'e', 'g', 'a', 'f', 's', '#', '$', '@', 'f', 'g', 's']

11、\s 匹配空

s="Awfagwega  131fs#$@f2da  33gs"
res=re.findall('\s',s)
print(res)
==>[' ', ' ', ' ', ' ']

12、\S 匹配非空

s="Awfagwega  131fs#$@f2da  33gs"
res=re.findall('\S',s)
print(res)
==>['A', 'w', 'f', 'a', 'g', 'w', 'e', 'g', 'a', '1', '3', '1', 'f', 's', '#', '$', '@', 'f', '2', 'd', 'a', '3', '3', 'g', 's']

13、\w字母数字下划线 非空

s="Awfagwega  13__#(*@(1fs#$@f2da  33gs"
res=re.findall('\w',s)
print(res)
==》['A', 'w', 'f', 'a', 'g', 'w', 'e', 'g', 'a', '1', '3', '_', '_', '1', 'f', 's', 'f', '2', 'd', 'a', '3', '3', 'g', 's']

14、贪婪匹配 .*

s="Awfagwega  13__#(*@(1fs#$@f2da  33gs"
res=re.findall('.*',s)
print(res)
==>['Awfagwega  13__#(*@(1fs#$@f2da  33gs', '']


s="Awfagwega  13__#(*@(1fs#$@f2da  33gss"
res=re.findall('1.*s',s)
print(res)
==>['13__#(*@(1fs#$@f2da  33gss']

15、非贪婪 。*?

s="Awfagwega  13__#(*@(1fs#$@f2da  33gss"
res=re.findall('1.*?s',s)
print(res)
==>['13__#(*@(1fs']

三、re高级用法

1、compile

import re
s="fef@*Emfs#@#&*FUW!@34311#$@njn"
re_temp1=re.compile('\w+')
res=re_temp1.findall(s)
print(res)

2、match(从开头开始匹配,只取一个) | search(搜索一个,只取一个)

import re
s="abcdddaa"
res1=re.match('aa',s)
res2=re.search('aa',s)
print(res1.group())===>None
print(res2.group())===>aa

3、()分组(也就是取括号里面的内容)

import re
s="abcbabdbakjdhqhoifioaoqfq"
res=re.findall('ba(.*?)if',s)
print(res)
==>['bdbakjdhqho']

++++++++++
s="abcbabdbakjdhqhoifioaoqfq"
res=re.findall('ba(k.*?)if',s)
print(res)
====>['kjdhqho']

4、split:通过正则的匹配规则,按匹配到的内容进行切割

import re
s="飞流直下三千尺,疑是银河落九天"
res=re.split(',',s)
print(res)
==>['飞流直下三千尺', '疑是银河落九天']
++++++++++++++++++++
s="飞流直下三11千尺,疑是31银321河落九天"
res=re.split('\d',s)#可以写匹配规则进行切割
print(res)
====>['飞流直下三', '', '千尺,疑是', '', '银', '', '', '河落九天']
++++++++++++++++++++
s="飞流直下三1111千尺,疑是31银321河落九天"
res=re.split('\d+',s)
print(res)
==》['飞流直下三', '千尺,疑是', '银', '河落九天']

5、sub(匹配替换匹配的内容,并返回) | subs(匹配替换匹配的内容,并返回替换的数量)

import re
s="飞流直下三11千尺,疑是31银321河落九天"
res=re.sub('\d',"",s)
print(res)
===>飞流直下三千尺,疑是银河落九天  <class 'str'>
import re
s="飞流直下三11千尺,疑是31银321河落九天"
res=re.sub('\d',"",s)
print(res)
===>('飞流直下三千尺,疑是银河落九天', 7) <class 'tuple'>
posted @ 2019-06-13 12:07  emos  阅读(331)  评论(0编辑  收藏  举报