正则表达式

正则表达式学习

一、元字符

“^”匹配行或者字符串起始位置(^dige:指以肖为开头)

“$”匹配行货字符串的结尾

“\b”匹配单次边界,通常用于匹配单个字符(/bxiaosheng/b:匹配xaosheng,/b不会匹配xiaosheng两边的字符,但会识别xiaosheng)

“\d”:匹配数字(比如匹配一个电话号码以4结尾前3位:15797681784,\d\d\d4$,re.compile('\d\d\d4$').findall(s))

“\w”匹配字母,数字,下划线(_\w+:匹配下划线后的字符串,\w{3}_+:匹配下划线前3个字符)

“\s”匹配空格(例如匹配xiao sheng ,“\w+\s\w+”匹配空格前后的所有字符)

“.”匹配除了换行符以外的任何字符,(例如匹配xiao123@#789 leave,".+"匹配所有字符)

“【abc】”:字符组,匹配包含括号内元素的字符(例如匹配123wdf@456中的字母,[a-z])

二、几种反义

“\W”匹配任意不是字母,数字,下划线的字符

“\S”匹配任意不是空白符的字符

“\D”匹配任意非数字的字符

“\B”匹配不是单词开头或结束的位置

“[^abc]”匹配除abc以外的任意字符

三、量词

“*”重复零次或更多(例如:‘aaaaaa’,“a*”匹配所有字符a)

‘+’重复一次或更多次(“+”和‘*’区别在于*可以是0次)

“?”重复一次或者更多次(‘aaaaaaa’,a?表示只匹配1次a)

“??”重复0次或1次,但尽可能少重复(‘aaacb’,a.??bb得到的是“acb”)

“{n,m}?”重复n到m次,但尽可能少重复(‘aaaaa’,a{0,m}因为最少是0次所以取到的结果为空)

“{n,}?”重复n次以上,但尽可能少重复

四、正则进阶

“(exp)”匹配exp,并捕获文本到自动命名的组里

“(?<name>exp)”匹配exp,并捕获文本到名称为那么的组里

“(?:exp)”匹配exp,不捕获匹配的文本,也不给此分组分配组号

“(?=exp)”匹配exp前面的位置

“(?<=exp)”匹配exp后面的配置(“to be or not to be ,this is the question”,(?<txt>.+(?=question)))

“(?!exp)”匹配后面跟的不是exp的位置(‘123abc’,‘\d{3}(?!\d)’匹配3位数字后面非数字的结果)

“(?<!exp)”匹配前面不是exp的位置

代码参考:

#ecoding:utf-8
import re
s = '15797681784'
d = 'a2345BCD_TTz好怂'
e ='xiang leave'
f = 'xiao123@#789 leave'
g = '123wdf@456'
h = 'xiaoshengwat'
f = 'to be or not to be,this is the question'
print(re.compile('\d\d\d4$').findall(s))
print(re.compile('_\w+').findall(d))
print(re.compile('\w{3}_+').findall(d))
print(re.compile('\w+\s\w+').findall(e))
print(re.compile('.+').findall(f))
print(re.compile('[a-z]').findall(g))
print(re.compile('(xiao)').findall(h)

运行结果:

['1784']
['_TTz好怂']
['BCD_']
['xiang leave']
['xiao123@#789 leave']
['w', 'd', 'f']
['xiao']

 

posted @ 2019-08-21 18:11  婷小生  阅读(240)  评论(0编辑  收藏  举报