正则表达式

2018-12-06 07:36:30来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

#正则表达式
# 一:什么是正则?
# 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。
# 或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,
# 并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

# 二:正则的用法
import re
# print(re.findall('\w9\w','axsdas9xas,_9xdsas_91'))
#\w,字母数字下划线,中间的必须为9
# print(re.findall('wangkai','wangkaishige dashuaibi,wangkai111'))
#匹配关键字
# print(re.findall('\W','wangkais++++=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  ))
# print(re.findall('a[=+*\-/]g',  'wang 4556 ai3\n aksaa-gdsds',re.DOTALL  ))
#匹配a和g中加减乘除,但是减号要放到两边,或者-号前面加上转义符\

#重复匹配
# ?:  代表?左边的字符出现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'))
#取xx或xxx的所有值

#():分组
# 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>'))
#取最近的值

# 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'))                     
#打印出来的结果多一个\,自动添加转义符
#
# msg="""
# my name is egon
# asdfsadfadfsadf egon
# 123123123123123egon
# """
# print(re.findall('egon$',msg,re.M))     #my name is egon\nasdfsadfadfsadf egon\n123123123123123egon'
#re.M,取所有行

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


# 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只能找第一个
# 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中的(^)

# print(re.findall('alex','alex is alex is alex'))        #三个用法对比
# print(re.search('alex','alex is alex is alex'))
# print(re.match('alex','alex is alex is alex'))


# pattern=re.compile('alex')                          #简写模式
# print(pattern.findall('alex is alex is alex'))
# print(pattern.search('alex is alex is alex'))
# print(pattern.match('alex is alex is alex'))

# msg="1-2*(60+(-40.35/5)-(-40*3))"
# ['1', '2', '60', '-40.35', '5', '-40', '3']       #得出这种结果
# print(re.findall('\D?(-?\d+\.?\d*)',msg))
#推导过程
# print(re.findall('\d*',msg))         #取数字类型
# print(re.findall('-?\d*',msg))       #取带-号的值,加上-号,可以有,可以没有
# print(re.findall('-?\.?\d*',msg))       #取带点的,加上-,要加转义符,不然是任意的意思
# print(re.findall('-?\d+\.?\d*',msg))     #再次定义数字类型,取至少一个以上的数字
# print(re.findall('-?\d+\.?\d*',msg))      #只取是做-号的-号,减法的去掉
# print(re.findall('\D?(-?\d+\.?\d*)',msg))  #判断-号的类型,在非数字类型后面的-号就是要取的。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:python3.5程序设计

下一篇:python--模块之re正则表达式