Loading

python/正则

python/正则

# 正则表达式:他针对对象很明确  就是对字符串进行处理的。

#re.findall 他会把符合条件的内容通过列表返回

#字符串的匹配方式是清晰对应的

#正则的匹配的方式是模糊匹配

#模糊匹配使用场地

#正则是快速进行匹配的方式

#正则是通过模块引入的一种模块

#正则本身就是一种小型高度专业化的语言,他只对字符串进行处理

#re是由C语言编写的,运行速度快

#正则就是元字符 . ^ $ + ? {} [] | () \

 

##正则  re模块
#对字符串进行模糊匹配
import re
# re.findall(pattern,string) 找到所有的匹配元素,返回列表
# . 匹配除\n以外的任意符合
# ^ 从字符串开始的位置匹配
# $ 从字符串结尾的位置匹配
# * + ? {}  重复功能
# 字符集 [] 起一个或者的意思   只有- ^ \在里边有用
# print(re.findall('[0-9]{4}','afewqfwgg34qrwqer1234323422gfqf2'))
# print(re.findall('(ad)+','addddd'))  通过括号把ad组成一个整体
# print(re.findall('(ad)+yuan','adadyuan12qwe'))
# print(re.findall('(\d)+yuan','adfwee4564543yuan233'))    #只会显示出组合里最后一位
# print(re.findall('(?:ad)+yuan','adadyuan12qwe'))     #通过?:取消优先级
# print(re.findall('www\.(?:oldboy|baidu).com','www.oldboy.com'))  #|或的意思
## \的功能是让有特殊功能的字符变成普通的,让普通的变的有意义
#\ 转义
# .是通配符什么都可以代表   除了\n所有的字符都能匹配上

#findall 前面第一个参数是匹配规则,后面是匹配的内容  规则和内容都是字符串

 

## ^是以什么开头的意思(只匹配第一个参数开头)^号必须放在第一位

 

### $是以什么结尾的意思

 

#### *是按着前面紧挨着的字符去重复,重复范围是0--无穷次  *(0,+00)贪婪匹配,有多少匹配多少

 

##### +是按着前面紧挨着的字符去重复,重复范围是1--无穷次  +(1,+00)贪婪匹配有多少匹配多少

 

###### ?是0和1的范围

 

####### {}是万能的,他可以表示自己定范围,{0,}==*不写就是无穷,{1,}==+  {0,1}==? {6}重复6次

 

######## 通过?贪婪匹配更改为惰性匹配

 

######### []学名是字符集  在字符集里没有特殊符号的意思[q*z] 在字符集里有特殊意义是'-' '^' '\'    [^]里的意思非的意思

 

########## \ 的功能是进行转义的  能让普通字符变得有意义,有特殊意义的变得没意义

 

########### | 的功能是或

 

  

import re
# s='helloalexworld'
# print(re.findall('alex','helloalexworld'))   #通过正则普通匹配也就是清晰匹配。
# print(re.findall('\d+','he22ll1oal3exw33orld45'))   #通过\d的模式模糊匹配出字符串中的数字
# print(re.findall('\+','he22ll1oal3exw33orld45'))
# print(re.findall('a..x','he22ll1oal3xw33orld45')) #一个点只能代替一个任何字符
# print(re.findall('^a..x','he22ll1oal3xw33orld45'))  #不是已a开头的匹配出来的是空列表
# print(re.findall('^a..x','ae2xll1oal3xw33orld45'))  #以a开头的匹配就能匹配出来了
# print(re.findall('a..x','ae2xll1oal3xw33orld45'))   #这种的匹配到字符串中主要有符合的都打印出来
# print(re.findall('a..x$','ae2xll1oal3xw33orld45'))    #这种是以什么结尾的,字符串的后面四位是以a..x结尾才能匹配上  字符串本身没有以a..x结尾的所有没有匹配上
# print(re.findall('a..x$','ae2xll1oal3xw33orld45a22x'))#这种是以什么结尾的,字符串的后面四位是以a..x结尾才能匹配上  字符串本身有以a..x结尾的所有可以匹配上
# print(re.findall('a..x$','ae2xll1oal3xw33orld45a22x$'))  #这样是肯定不能匹配上的,因为$是元字符不用用来匹配的
# print(re.findall('b*','bbbbbbbbbssdbdaabsdwwsd'))
# print(re.findall('^d*','dddwfwfdsdsdddddswea'))
# print(re.findall('alex*','asdfswsdfalexxx'))  #x匹配的次数 0--+00
# print(re.findall('alex+','asdfswsdfalexxx'))  #x匹配的次数 1--+00
# print(re.findall('alex*','asdfswsdfale'))     #可以匹配成功,因为匹配x是0--+00
# print(re.findall('alex+','asdfswsdfale'))     #不可以是因为匹配x是1--+00
# print(re.findall('ale+x','asdfswsdfaleex'))
# print(re.findall('alex?','asdfswsdfalexxxx'))   #可以匹配出来,只会匹配一个x 因为?最大的范围就是1
# print(re.findall('ale+x','asdfswsdfale'))       #可以匹配出来,不会匹配x 因为?最小的范围就是o
# print(re.findall('ale?x','asdfswsdfalex'))
# print(re.findall('alex{6}','asdfswsdfalexxxxxx'))  #重复6次
# print(re.findall('alex{0,6}','asdfswsdfalexxxxxx'))  #重复0--6之间的次数
# print(re.findall('alex*?','asdfswsdfalexxxxxx'))  ##通过?把贪婪的更改为惰性(惰性匹配就是按照最小匹配)
# print(re.findall('www[oldboy baidu]','wwwbaidu'))  #['wwwb']
# print(re.findall('x[yz]p','xypuuxzpuuuxyp')) #[yz]里的y和z是或的关系
# print(re.findall('x[y,z]p','xypuu,xzpuuu,xyp'))
# print(re.findall('q[az]','fssdafkqa')) #q[a*z]单独匹配q是没有内容的,匹配的必须是q和中括号其中的一个
# print(re.findall('q[a*z]','fssdafkqaaaa'))  #在字符集里没有特殊符号的意思[q*z]
# print(re.findall('q[a-z]', 'qwe')) #只能匹配[a-z]其中一个再加上q
# print(re.findall('q[a-z]*','qwewewq')) #现在就是可以匹配出所以a-z的内容
# print(re.findall('q[a-z]*','qweqweqwe9'))  #9不能出来,因为9不存在a-z内
# print(re.findall('q[A-Z]*','qWEQEFSAFW9'))
# print(re.findall('q[^a-z]','q1324ewrqweertt'))   #[^]里的意思非的意思
# print(re.findall('\([^()]*\)','12+(34*6+2-5*(2-1))'))  #  ['(2-1)']  这是求括号里的内容
# print(re.findall('\d+','12+(34*6+2-5*(2-1))'))  #代表取数字的意思
# print(re.findall('\D+','12+(34*6+2-5*(2-1))'))  #代表不取数字的意思
# print(re.findall('\s+','wffewfs12+(34*6+2-5*(2-1))'))  #代表的空白的意思
# print(re.findall('\S+','12+(34*6+2-5*(2-1))')) #代表取非字符和空白的
# print(re.findall('\w+','wffewfs12+(34*6+2-5*(2-1))'))  #匹配任何子母和数字的字符
# print(re.findall('\W+','wffewfs12+(34*6+2-5*(2-1))')) #匹配非字母和数字的字符
# print(re.findall('\b+','wf  few & #@#fs12+(34*6  +2-5*(2-1))'))
# print(re.findall('www\.baidu','www.baidu')) #这个\是把那个转义成普通的
# print(re.findall('www\*baidu','www*baidu')) #这个\是把那个转义普通的

##正则  re模块
#对字符串进行模糊匹配
import re
# re.findall(pattern,string) 找到所有的匹配元素,返回列表
# . 匹配除\n以外的任意符合
# ^ 从字符串开始的位置匹配
# $ 从字符串结尾的位置匹配
# * + ? {}  重复功能
# 字符集 [] 起一个或者的意思   只有- ^ \在里边有用
# print(re.findall('[0-9]{4}','afewqfwgg34qrwqer1234323422gfqf2'))
# print(re.findall('(ad)+','addddd'))  通过括号把ad组成一个整体
# print(re.findall('(ad)+yuan','adadyuan12qwe'))
# print(re.findall('(\d)+yuan','adfwee4564543yuan233'))    #只会显示出组合里最后一位
# print(re.findall('(?:ad)+yuan','adadyuan12qwe'))     #通过?:取消优先级
# print(re.findall('www\.(?:oldboy|baidu).com','www.oldboy.com'))  #|或的意思
## \的功能是让有特殊功能的字符变成普通的,让普通的变的有意义
#\ 转义
1.#后面加一个元字符使其变成欧婷符号
2.#将一些普通符号变成特殊符号 比如\d \w
# print(re.findall('\d+\.?\d*\*\d+\.?\d*','2*6+7*45+1.4*3-8/4'))
# print(re.findall('\d*\.?\d\*\d*\.?\d','23*63+7*45+1.4*3-8/4'))
# print(re.findall('\w','$qwe212321'))  #特殊符号是拿不到的  一般碰到\\就直接带上r
# print(re.findall('\\bI','hello I am LIA'))
# print(re.findall('\dI','hello 334I am LIA'))
# print(re.findall('c.l','abc\l'))
##正则表达式的方法
# re.finditer()  #返回的是迭代
# re.findall() #返回的是列表内容
# s=re.findall('\d+','ad324sdfs32')
# print(s)
# s=re.finditer('\d+','ad324sdfs32')
# print(next(s).group())
# print(next(s).group())

# ret=re.findall('\d+','asdfsfsd342wfwf21')
# print(ret)

# ret=re.finditer('\d+','asfsw2w3wwsadf22323')
# print(next(ret).group())
# print(next(ret).group())

# ret =re.search('\d+','asfsd34sd3') #匹配到一个以后就不往后走了
# print(ret.group())
# print(ret)

# ret=re.match('\d+','432asfsd34sd3')   #只在字符串开始女的位置匹配
# print(ret.group())

##split分割
# ret=re.split('\d+','weww12eff23wfwr43r3ff',2)
# print(ret)
# s=re.split('l','hello yuan')   ['he', '', 'o yuan']
# print(s)

##sub 替换
# s=re.sub('\d+','A','hello 2342sgfdsf12')   #hello AsgfdsfA
# s1=re.subn('\d+','A','hello 2342sgfdsf12')
# print(s1)
# print(s)

#compile:编译方法:
# s=re.compile('\d+')   #设置功能
# b=s.findall('qewerwqqw12331332')   #re.findall('\d','1qwr323r2r32')
# print(b)

#命名分组
# s=re.findall(r'(?P<author>\w+)\\aticles\\(?P<ID>\d{4})',r'yuan\aticles\1234')
# print(s)
# s1=re.findall(r'\w+\\aticles\\\d{4}',r'yuan\aticles\1234')
# print(s1)

# print(s.group('ID'))
# print(s.group('author'))
# res=re.findall(r'a\\nb',r'a\nb')
# print(res)
# print(re.findall('\d+?','12332dfdfqwqd1'))

 

 
posted @ 2017-04-27 19:24  Meet~  阅读(335)  评论(0编辑  收藏  举报