正则表达式学习
一、元字符
“^”匹配行或者字符串起始位置(^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‘]
原文:https://www.cnblogs.com/xswt/p/11390345.html