re(模块正则表达式)

re模块(正则)

​ 正则是用一些具有特殊含义的符号组合到一起(成为正则表达式)来描述字符或者字符串的方法,或者说正则就是用来描述一类事物的规则.

import re

#从字符串中全部查找内容,返回一个列表
s = "meet_宝元_meet"
print(re.findall("meet",s))
      #['meet', 'meet']

#查找数字,字母(中文),下划线 -- \w
s = "meet_宝元__meet123"
print(re.findall("\w",s))
     #['m', 'e', 'e', 't', '_', '宝', '元', '_', '_', 'm', 'e', 'e', 't', '1', '2', '3']
    
#查找非数字,字母(中文),下划线 -- \W
s = "meet_宝元__meet123!@#"
print(re.findall("\w",s))
     #['!', '@', '#']


#查找任意空格,换行符,制表符   -- \s
s = "meet_ 宝元_ me  et\t \n"
print(re.findall("\s",s))
     #[' ', ' ', ' ', ' ', '\t', ' ', '\n']
    
#查找非任意空格,换行符,制表符   --\S
s = "meet_ 宝元_ me  et\t \n"
print(re.findall("\S",s))
     #['m', 'e', 'e', 't', '_', '宝', '元', '_', 'm', 'e', 'e', 't']

#查找数字     --\d
s = "meet_ 宝元_ me  et\t \n"
print(re.findall("\d",s))
     #['1', '2', '3']
    
#查找非数字    --\D
s = "meet_ 宝元_ me  et\t \n"
print(re.findall("\D",s))
     #['m', 'e', 'e', 't', '_', ' ', '宝', '元', '_', ' ', 'm', 'e', ' ', ' ', 'e', 't', '\t', ' ', '\n']
    
#查找是以什么开头的内容   -- \A ^
s = "meet宝元_123meet"
print(re.findall("\Ameet",s))  #['meet']
print(re.findall("^meet",s))   #['meet']

#查找是以什么结尾的内容   -- \Z $
s = "meet宝元_123meet"
print(re.findall("t\Z",s))      #['t']
print(re.findall("t$",s))       #['t']

#查找换行符  -- \n
s = "meet宝元_123meet \n \t \n"
print(re.findall("\n",s))       #['\n', '\n']

#查找制表符  --\t
s = "meet宝元_123meet \n \t \n"
print(re.findall("\t",s))       #['\t']

# . 只能匹配任意一个内容(非换行符)  -- .
s = "m\net宝元_123maet \n \t"
print(re.findall("m.e",s))      #['mae']

# . 只能匹配任意一个内容       -- re.DOTALL
s = "m\net宝元_123maet \n \t"
print(re.findall("m.e",s,re.DOTALL))  #['m\ne', 'mae']

s = "meet宝元_1A-23maet"
print(re.findall("[a-z]",s))   --小写的a到z
      #['m', 'e', 'e', 't', 'm', 'a', 'e', 't']
print(re.findall("[A-Z]",s))   --大写的A到Z
      #['A']
print(re.findall("[A-Za-z]",s))  --大写和小写的a到z,A到Z
      #['m', 'e', 'e', 't', 'A', 'm', 'a', 'e', 't']
print(re.findall("[a-z0-9]",s))  --小写的a到z,数字0到9
      #['m', 'e', 'e', 't', '1', '2', '3', 'm', 'a', 'e', 't']
    
#查找非0-9的内容
s = "meet宝元_1A-23maet"
print(re.findall("[^0-9]",s))
     #['m', 'e', 'e', 't', '宝', '元', '_', 'A', '-', 'm', 'a', 'e', 't']
    
#匹配*前面元素0个或多个(贪婪匹配)   -- *
s = "mmmmm"
print(re.findall("m*",s))   #['mmmmm', '']


#匹配+前面元素1个或多个(贪婪匹配)   -- +
s = "meet_asdf_msss_mnns_aaam"
print(re.findall("me+",s))    #['mee']

#匹配?前面元素0个或1个      -- ?
s = "meet_af_ms_ms_m"
print(re.findall("m?",s))
     #['m', '', '', '', '', '', '', '', 'm', '', '', 'm', '', '', 'm', '']


#{}指定次数
s = "meet_asdf_msss_mmns_aaam"
print(re.findall("s{3}",s))  --s{3} s重复三次 == sss
      #['sss']
print(re.findall("s{1,3}",s))  --指定最少多少次,最多多少次
      #['s', 'sss', 's']        
    
# 匹配左边或右边     -- |
s = "meet_asdf_msss_mmns_aaam"
print(re.findall("m|s",s))
      #['m', 's', 'm', 's', 's', 's', 'm', 'm', 's', 'm']
      
#任意内容0个或多个    -- .*
s = "m-e-me-meet-meet_123\t \n"
print(re.findall(".*",s))
      #['m-e-me-meet-meet_123\t ', '', '']
      
#任意内容0个或1个
s = "m-e-me-meet-meet_123"
print(re.findall("m.*?e",s))
      #['m-e', 'me', 'me', 'me']
      
#任意内容1个或多个 --.+
s = "meet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssstt"
print(re.findall("m(.+)t",s))
     #['eet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssst']
s = "meet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssstt"
print(re.findall("m(?:..?)t",s))     
     #['meet']
     
     
s = 'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb 的 alex wusir '
print(re.findall("\w+_sb",s))
     #['alex_sb', 'ale123_sb', 'wu12sir_sb', 'wusir_sb', 'ritian_sb']    
print(re.findall("[a-z]+_sb",s))
     #['alex_sb', 'sir_sb', 'wusir_sb', 'ritian_sb']

#获取括号内的内容 -- []
name = "m-e-me-meet-meet_123"
print(re.findall("[1-9]",name))
      #['1', '2', '3']     --[]中的-是什么至什么不会匹配
    
    
    
    
#findall 全部找到返回一个列表  
print(re.findall("alex","alexdsb,alex_sb,alexnb,al_ex"))
      #['alex', 'alex', 'alex']
    
#search 从字符串中任意位置进行匹配查找到一个就停止了,返回的是一个对象,获取匹配的内容必须用.group()进行获取
s = '_sb alex 123_sb wu12sir_sb wusir_sb ritian_sb 的 x wusir '
print(re.search(("ale",s).group()))
      #ale
    
#match 从字符串开始位置进行匹配,找到一个后就停止查找,找到后返回的是一个对象,获取匹配的内容必须用.group()进行获取
s = '_sb alex 123_sb wu12sir_sb wusir_sb ritian_sb 的 x wusir '
print(re.match("ale",s).group())
      #报错
    
#split 分割,可按照任意分隔符进行分割
s = '_sb alex,123:sb;wu12sir#sb*wusir!sb ritian_sb 的 x wusir '
print(re.split("[#,:!*]",s))
     #['_sb alex', '123', 'sb;wu12sir', 'sb', 'wusir', 'sb ritian_sb 的 x wusir ']
    
#sub 替换
print(re.sub('barry', 'meet', 'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。'))
     # meet是最好的讲师,meet就是一个普通老师,请不要将meet当男神对待。
    
#compile 定义匹配规则
obj = re.compile('\d{2}')
print(obj.findall("alex12345"))
      # ['12', '34']
    
# finditer 返回一个迭代器
g = re.finditer('al',"alex_alsb,al22,aladf")
print(next(g).group())
print([i.group() for i in g])
# al
#['al','al','al']

#命名分组
ret = re.search("<(?P<tag_name>\w+)>\w+</\w+>","<h1>hello</h1>")
print(ret.group("tag_name"))
print(ret.group())
#h1
#<h1>hello</h1>
练习:
1 "1-2*(60+(-40.35/5)-(-4*3))"

1.1 匹配所有的整数
print(re.findall('\d+',"1-2*(60+(-40.35/5)-(-4*3))"))

1.2 匹配所有的数字(包含小数)
print(re.findall(r'\d+\.?\d*|\d*\.?\d+', "1-2*(60+(-40.35/5)-(-4*3))"))

1.3 匹配所有的数字(包含小数包含负号)
print(re.findall(r'-?\d+\.?\d*|\d*\.?\d+', "1-2*(60+(-40.35/5)-(-4*3))"))

2,匹配一段你文本中的邮箱
s='http://blog.csdn.net/make164492212/article/details/51656638'
print(re.findall("h.*2/",s))

3,匹配一段你文本中的每行的时间字符串 这样的形式:'1995-04-27'

s1 = '''
时间就是1995-04-27,2005-04-27
1999-04-27 老男孩教育创始人
老男孩老师 alex 1980-04-27:1980-04-27
2018-12-08
'''
print(re.findall('\d{4}-\d{2}-\d{2}', s1))
print(re.findall("\d+-\d+-\d+",s1))

4 匹配 一个浮点数
print(re.findall('\d+\.\d*','1.17'))

5 匹配qq号:腾讯从10000开始:
qq = input("请输入QQ号:")
print(re.findall("[1-9][0-9]{4,9}",qq))

s1 = '''
<div id="cnblogs_post_body" class="blogpost-body"><h3><span style="font-family: 楷体;">python基础篇</span></h3>
<p><span style="font-family: 楷体;">&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/p/6847032.html" target="_blank">python 基础知识</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6627631.html" target="_blank">python 初始python</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/articles/7087609.html" target="_blank">python 字符编码</a></strong></strong></span></p>
<p><span style="font-family: 楷体;"><strong><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/6752157.html" target="_blank">python 类型及变量</a></strong></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6847663.html" target="_blank">python 字符串详解</a></strong></span></p>
<p><span style="font-family: 楷体;">&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/p/6850347.html" target="_blank">python 列表详解</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6850496.html" target="_blank">python 数字元祖</a></strong></span></p>
<p><span style="font-family: 楷体;">&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/p/6851820.html" target="_blank">python 字典详解</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/p/6852131.html" target="_blank">python 集合详解</a></strong></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/7087614.html" target="_blank">python 数据类型</a>&nbsp;</strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6752169.html" target="_blank">python文件操作</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/8149209.html" target="_blank">python 闭包</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/6705714.html" target="_blank">python 函数详解</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/7087616.html" target="_blank">python 函数、装饰器、内置函数</a></strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/7087629.html" target="_blank">python 迭代器 生成器</a>&nbsp;&nbsp;</strong></span></p>
<p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/6757215.html" target="_blank">python匿名函数、内置函数</a></strong></span></p>
</div>
'''
1,找到所有的span标签的内容
ret = re.findall('<span(.*?)>', s1)
print(ret)

2,找到所有a标签对应的url
print(re.findall('<a href="(.*?)"',s1))    

便于理解

/fo+/ 因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。 等价于{0,}

/eg*/ 因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。等价于{1,} 

/Wil?/ 因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者“Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。等价于{0,1}

^  匹配字符串的开始位置,在集合([])中表示“非

猜你喜欢

转载自www.cnblogs.com/tutougold/p/11267994.html