美文网首页
正则表达式练习记录

正则表达式练习记录

作者: 喜欢吃栗子 | 来源:发表于2017-08-16 11:21 被阅读0次

    1、首先要导入python的re模块。

    2、元字符. ^ $ * + ? {} [] \ | ()

    re模块中的findall(str1,str2)方法返回字串str2中匹配str1格式的字串。例如在字符串'dit dot det,dct dit dot'中匹配'dit'结果为:

    str1='dit dot det,dct dit dot'

    printre.findall('dit',str1)

    结果:

    ['dit','dit']

    |作用:'dit|dct'表示dit或者dct。

    str1='dit dot det,dct dit dot'

    printre.findall('dit|dct',str1)

    结果:

    ['dit','dct','dit']

    []作用:[ic]表示i或c,例如'd[ic]t'表示dit和dct两者,和'dit|dct'等价:

    str1='dit dot det,dct dit dot'

    printre.findall('d[ic]t',str1)

    结果:

    ['dit','dct','dit']

    ^作用一:[^ic]中^表示否定,即除了i和c:

    str1='dit dot det,dct dit dot'

    printre.findall('d[^ic]t',str1)

    结果:

    ['dot','det','dot']

    ^作用二:^dit表示子串dit在开头位置,而dct不是在开头:

    str1='dit dot det,dct dit dot'

    printre.findall('^dit',str1)

    printre.findall('^dct',str1)

    结果:

    ['dit'][]

    $作用:dot$表示子串dot要在末尾位置,而dct不是在末尾:

    str1='dit dot det,dct dit dot'

    printre.findall('dot$',str1)

    printre.findall('dct$',str1)

    结果:

    ['dot'][]

    .作用:d.t表示d与t之间省略了一个任意字符:

    str1='dit dot det,dct dit dot'

    printre.findall('d.t',str1)

    结果:

    ['dit','dot','det','dct','dit','dot']

    +作用:di+t表示d与t之间省略了一个或多个'i':

    str1='d dt dit diit det'

    printre.findall('d.+t',str1)

    结果:

    ['dit','diit']

    *作用:di*t表示d与t之间省略了零个至多个'i':

    str1='d dt dit diit det'

    printre.findall('d.*t',str1)

    结果:

    ['dt','dit','diit']

    经常,'.'和'+'或者'*'搭配使用。'.+'表示省略了一个至多个任意元素,'.*'表示省略了零个至多个任意元素:

    str1='d dt dit diit det'

    printre.findall('d.+t',str1)

    printre.findall('d.*t',str1)

    结果:

    ['d dt dit diit det']['d dt dit diit det']

    ?作用一:看.+的匹配结果,'dit'、'dot'也满足'd.+t'的匹配条件,而输出的却是满足匹配条件的最长子串'dit dot det,dct dit dot',这个叫贪婪匹配。如果要输出最短的匹配字串,只需在'+'后面加上'?':(注:对于'*'也是一样,只需在'*'后面加上'?')

    str1='d dt dit diit det'

    printre.findall('d.+?t',str1)

    结果:

    ['dit','dot','det','dct','dit','dot']

    ?作用二:di?t表示i可有可无,即dt、dit都满足匹配条件:

    str1='d dt dit diit det'

    printre.findall('di?t',str1)

    结果:

    ['dt','dit']

    {}作用一:di{n}t表示d和t之间有n个'i':

    str1='dt dit diit diiit diiiit'

    printre.findall('di{2}t',str1)

    结果:

    ['diit']

    {}作用二:di{n,m}t表示d和t之间有n到m个'i':

    str1='dt dit diit diiit diiiit'

    printre.findall('di{1,3}t',str1)

    结果:

    ['dit','diit','diiit']

    其中,n和m都是可以省略的。{n,}表示n个到任意个;{,m}表示0个到m个;{,}表示任意个,和'*'功能一样:

    str1='dt dit diit diiit diiiit'

    printre.findall('di{1,}t',str1)

    printre.findall('di{,3}t',str1)

    printre.findall('di{,}t',str1)

    结果:

    ['dit','diit','diiit','diiiit']

    ['dt','dit','diit','diiit']

    ['dt','dit','diit','diiit','diiiit']

    \作用一:取消元字符,变成转义字符:

    str1='^abc ^abc'

    printre.findall('^abc',str1)

    printre.findall('\^abc',str1)

    结果:

    []['^abc','^abc']

    \作用二:预定义字符

    str1='12 abc 345 efgh'

    printre.findall('\d+',str1)

    printre.findall('\w+',str1)

    结果:

    ['12','345']

    ['12','abc','345','efgh']

    ()作用:在匹配字符串后,只输出匹配字串'()'里面的内容:

    str1='12abcd34'

    printre.findall('12abcd34',str1)

    printre.findall('1(2a)bcd34',str1)

    printre.findall('1(2a)bc(d3)4',str1)

    结果:

    ['12abcd34']

    ['2a']

    [('2a','d3')]


    3、re模块里的主要方法:findall()、finditer()、match()、search()、compile()、split()、sub()、subn()。

    re.findall(pattern,string,flags = 0)

    作用:在string中从左往右搜索与pattern匹配的字串,结果以list形式返回。

    str1='ab cd'

    printre.findall('\w+',str1)

    结果:['ab', 'cd']

    re.finditer(pattern,string,flags = 0)

    作用:其功能与re.findall相同,但结果以迭代器的形式返回。

    str1='ab cd'

    iter1=re.finditer('\w+',str1)

    forainiter1:

    printa.group(),a.span()

    结果:

    ab (0, 2)

    cd (3, 5)

    (注:a.group()返回满足匹配调节的字串,a.span()返回字串的起始位置和末尾位置)

    re.search(pattern,string,flags = 0)

    作用:在string中从左往右搜索与pattern匹配的字串,无匹配结果则返回None,否则返回一个search实例。

    str1='ab cd'

    result=re.search('cd',str1)

    ifresult==None:

    print'None'

    else:

    printresult.group(),result.start(),result.end()

    结果:cd 3 5

    re.match(pattern,string,flags = 0)

    作用:判断string的头部是否与pattern匹配,是则返回match实例,否则返回None。

    str1='ab cd'

    result=re.match('cd',str1)

    ifresult==None:

    print'None'

    else:

    printresult.group(),result.start(),result.end()

    结果:None

    re.compile(pattern,flags = 0)

    作用:对匹配格式pattern进行编译,返回一个实例对象。对正则表达式先编译,可以大幅提高匹配速度。

    str1='ab cd'

    pre=re.compile('ab')

    printpre.findall(str1)

    结果:['ab']

    re.split(pattern,string,maxsplit = 0,flags = 0)

    作用:在string匹配pattern的时候做分割:

    str1='ab.c.de'

    str2='12+34-56*78/90'

    printre.split('\.',str1)

    printre.split('[\+\-\*/]',str2)

    结果:

    ['ab', 'c', 'de']

    ['12', '34', '56', '78', '90']

    re.sub(pattern,repl,string,count = 0,flags = 0)

    作用:在string当中把满足pattern正则的字串替换成repl:

    str1='abcde'

    printre.sub('bc','123',str1)

    结果:a123de

    re.subn(pattern,repl,string,count = 0,flags = 0)

    作用:其功能与re.sub()相同,但返回的结果多了一个数字,代表替换了多少次

    str1='abcdebce'

    printre.subn('bc','123',str1)

    结果:('a123de123e', 2)

    相关文章

      网友评论

          本文标题:正则表达式练习记录

          本文链接:https://www.haomeiwen.com/subject/vafirxtx.html