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']
View Code

如何将match和search方法返回的对象打印出来呢?

import re
a = 'a2fho54d'
re_res = re.search('[0-9]', a) 
if re_res:
    print(re_res.group())  

##############
2
View Code
 
(二)常用正则表达式符号
  1. '.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
  2. '^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
  3. '$'     匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
  4. '*'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb''ab''a']
  5. '+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab''abb']
  6. '?'     匹配前一个字符1次或0
  7. '{m}'   匹配前一个字符m次
  8. '{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb''ab''abb']
  9. '|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
  10. '(...)' 分组匹配,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'>

......................

 

posted @ 2018-06-28 20:18  杨大白  阅读(136)  评论(0)    收藏  举报