pyhton re模块
正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序员们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。
re的匹配语法 %re.name("匹配规则", "要匹配的字符串")
re.match() 从头开始匹配,即只匹配第一个值
re.search() 匹配包含,匹配到第一个就不往下匹配
re.findall() 把所有匹配到到的字符以列表的形式返回
re.splital() 以匹配到的字符当做列表分隔符
re.sub () 匹配字符并替换
re.fullmatch() 全部匹配
>>> import re >>> a = 'a2fho54d' >>> re.match('[0-9]',a) >>> re.match('a',a) <_sre.SRE_Match object; span=(0, 1), match='a'> >>> re.search('[0-9]',a) <_sre.SRE_Match object; span=(1, 2), match='2'> >>> re.findall('[0-9]',a) ['2', '5', '4']
如何将match和search方法返回的对象打印出来呢?
import re a = 'a2fho54d' re_res = re.search('[0-9]', a) if re_res: print(re_res.group()) ############## 2
'.'默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行'^'匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)'$'匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以'*'匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为['abb','ab','a']'+'匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab','abb']'?'匹配前一个字符1次或0次'{m}'匹配前一个字符m次'{n,m}'匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb','ab','abb']'|'匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC''(...)'分组匹配,re.search("(abc){2}a(123|456)c","abcabca456c").group() 结果 abcabca456c
'\d' 匹配任何十进制数,它相当于类[0-9]
'\d+' 如果需要匹配一位或者多位数的数字时用
'\D' 匹配任何非数字字符,它相当于类[^0-9]
'\s' 匹配任何空白字符,它相当于类[\t\n\r\f\v]
'\S' 匹配任何非空白字符
'\w' 匹配包括下划线在内任何字母数字字符,它相当于类[a-zA-Z0-9_]
'\W' 匹配非任何字母数字字符包括下划线在内,它相当于类[^a-zA-Z0-9_]
操作代码如下:
>>> import re >>> re.match('.','fjfi34') <_sre.SRE_Match object; span=(0, 1), match='f'> >>> re.match('.','383449') <_sre.SRE_Match object; span=(0, 1), match='3'> >>> re.match('.','\fjidak') <_sre.SRE_Match object; span=(0, 1), match='\x0c'>
>>> re.match('..','abdf')
<_sre.SRE_Match object; span=(0, 2), match='ab'>
>>> re.search('^a','abgd') #表示匹配以a开头 <_sre.SRE_Match object; span=(0, 1), match='a'> >>> re.search('^ab','abghus') #此时等价于re.match('ab','abhufjj') <_sre.SRE_Match object; span=(0, 2), match='ab'> >>> re.search('^b','abghuus') #匹配不上 >>>
>>> re.search('b$','fsffb') #表示匹配以b结尾 <_sre.SRE_Match object; span=(4, 5), match='b'>
>>> re.search('a*','fhsbs') #表示匹配*前面的字符多次或0次
<_sre.SRE_Match object; span=(0, 0), match=''>
>>> re.search('a*','afhusd')
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.search('abc*','abchuccabcccug') #a必须匹配和b连着,b可以是0个或多个
<_sre.SRE_Match object; span=(0, 3), match='abc'>
......................

浙公网安备 33010602011771号