正则表达式

动态模糊匹配

 

aa= "<b>注销</b>"
t=re.findall(r"<b>(.+?)</b>",aa)
print(t)
打印
['注销']

re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

     aa= "ChenRonghua123"
        t=re.match("^Chen",aa)
        print(t)
        print(t.group())
打印

<_sre.SRE_Match object; span=(0, 4), match='Chen'>
Chen

  

    aa= "Chen321Ronghua123"
    t=re.match("Chen",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(0, 4), match='Chen'>
Chen

  

     
    /d代表一个数字,如果代表多个数字加上+号
     aa= "Chen321Ronghua123" t=re.match("^Chen\d",aa) print(t) print(t.group())
打印

<_sre.SRE_Match object; span=(0, 5), match='Chen3'>
Chen3

    aa= "Chen321Ronghua123"
    t=re.match("^Chen\d+",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(0, 7), match='Chen321'>
Chen321

  

     .的用法,匹配任意
  
     aa= "Chen321Ronghua123" t=re.match(".",aa) print(t) print(t.group())
打印

<_sre.SRE_Match object; span=(0, 1), match='C'>
C

      

    aa= "Chen321Ronghua123"
    t=re.match("^.",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(0, 1), match='C'>
C

    aa= "Chen321Ronghua123"
    t=re.match("^.+",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(0, 17), match='Chen321Ronghua123'>
Chen321Ronghua123

  

re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。

     aa= "Chen321Ronghua123"
        t=re.search("R.+a",aa)
        print(t)
        print(t.group())
打印

<_sre.SRE_Match object; span=(7, 14), match='Ronghua'>
Ronghua

  

     $匹配字符串的末尾
     aa= "Chen321Ronghua123a" t=re.search("a$",aa) print(t) print(t.group())
打印

<_sre.SRE_Match object; span=(17, 18), match='a'>
a

 

    [a-z]匹配任意小写字母
    aa= "Chen321Ronghua123a"
    t=re.search("R[a-z]",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(7, 9), match='Ro'>
Ro

    

    aa= "Chen321Ronghua123a"
    t=re.search("R[a-z]+",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(7, 14), match='Ronghua'>
Ronghua

 

 

    aa= "Chen321Ronghua123a"
    t=re.search("R[a-z]+a",aa)
    print(t)  
    print(t.group())
打印

<_sre.SRE_Match object; span=(7, 14), match='Ronghua'>
Ronghua

 

    [A-Z]

    aa= "Chen321RongAhuaRonghua123a"
    t=re.search("R[a-z]+a",aa)  
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(15, 22), match='Ronghua'>
Ronghua

 

    aa= "Chen321RongAhuaRonghua123a"
    t=re.search("R[a-zA-Z]+a",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(7, 22), match='RongAhuaRonghua'>
RongAhuaRonghua

  

     aa= "1123#hello#"
        t=re.search("#.+#",aa)
        print(t)
        print(t.group())
打印

<_sre.SRE_Match object; span=(4, 11), match='#hello#'>
#hello#

  

     ?匹配前一个字符1次或者0次
     aa= "alex" t=re.search("a?",aa) print(t) print(t.group())
打印

<_sre.SRE_Match object; span=(0, 1), match='a'>
a

 
    aa= "aalex"
    t=re.search("a?",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(0, 1), match='a'>
a

 

    aa= "aaaaaalex"
    t=re.search("aaa?",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(0, 3), match='aaa'>
aaa


    aa= "aalexaaa"
    t=re.search("aaa?",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(0, 2), match='aa'>
aa


    aa= "alexaaa"
    t=re.search("aaa?",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(4, 7), match='aaa'>
aaa

 

    aa= "aaexaaa"
    t=re.search("aal?",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(0, 2), match='aa'>
aa

 
     
      {}大括号,匹配n个前面表达式
     aa= "aalx2a345a" t=re.search("[0-9]{3}",aa) #匹配3位数,re{ n} print(t) print(t.group())
打印

<_sre.SRE_Match object; span=(6, 9), match='345'>
345

  

findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

     aa= "aa1x2a345a"
        t=re.findall("[0-9]{1,3}",aa) #匹配1-3位数,re{ n, m}
        print(t)
打印
['1', '2', '345']

    aa= "aa1x2a3456a"
    t=re.findall("[0-9]{1,3}",aa) #匹配最大为3位数,所以3456进行了拆分
    print(t)
打印
['1', '2', '345', '6']
 
     “|”管道符,还有或的意思
     aa= "ABCBabcCD" t=re.search("abc|ABC",aa) print(t) print(t.group())
打印

<_sre.SRE_Match object; span=(0, 3), match='ABC'>
ABC

  

    aa= "ABCBabcCD"
    t=re.findall("abc|ABC",aa)
    print(t)
打印

['ABC', 'abc']

  

     ()分组匹配
     aa= "alexabcc" t=re.search("abc{2}",aa) print(t) print(t.group())
打印

<_sre.SRE_Match object; span=(4, 8), match='abcc'>
abcc

 

  

    aa= "alexabcabcc"
    t=re.search("(abc){2}",aa)
    print(t)  
    print(t.group())
打印

<_sre.SRE_Match object; span=(4, 10), match='abcabc'>
abcabc

  

     匹配管道符“|”
     aa= "alexabcabc|" t=re.search("(abc){2}\|",aa) print(t) print(t.group())
打印

<_sre.SRE_Match object; span=(4, 11), match='abcabc|'>
abcabc|

 

    aa= "alexabcabc||=||="
    t=re.search("(abc){2}\|\|=",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(4, 13), match='abcabc||='>
abcabc||=

 

    aa= "alexabcabc||=||="
    t=re.search("(abc){2}(\|\|=){2}",aa)
    print(t)
    print(t.group())
打印

<_sre.SRE_Match object; span=(4, 16), match='abcabc||=||='>
abcabc||=||=

  

    \A以什么开头,同^,\Z以什么结尾,同&      
     aa= "213a" t=re.search("\A[0-9]+[a-z]\Z",aa) #以数字开头,以小写字母结尾 print(t) print(t.group())
打印

<_sre.SRE_Match object; span=(0, 4), match='213a'>
213a

  

        \D匹配非数字的任意字符,包括特殊字符
     aa= "213$ -a" t=re.search("\D+",aa) print(t) print(t.group())
打印

<_sre.SRE_Match object; span=(3, 7), match='$ -a'>
$ -a

  

     \w匹配[A-Z][a-z][0-9],匹配字符和数字
     aa= "213aaa$ -a" t=re.search("\w+",aa) print(t) print(t.group())
打印

<_sre.SRE_Match object; span=(0, 6), match='213aaa'>
213aaa

  

     \w匹配非[A-Z][a-z][0-9],只匹配特殊字符
     aa= "213aaa$ - *("
        t=re.search("\W+",aa)
        print(t)
        print(t.group())
打印

<_sre.SRE_Match object; span=(6, 12), match='$ - *('>
$ - *(

  

     \s匹配空白等\r\t\n等字符
     aa= "213aaa$\r\n " t=re.search("\s+",aa) print(t)
打印
<_sre.SRE_Match object; span=(7, 13), match='\r\n    '>

  

     赋值字典?P
     aa= "213aaa" t=re.search("(?P<id>[0-9]+)",aa) print(t) print(t.groupdict())
打印

<_sre.SRE_Match object; span=(0, 3), match='213'>
{'id': '213'}

  

     aa= "aaa565fss888"
        t=re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]+)",aa)
        print(t)
        print(t.groupdict())
打印

<_sre.SRE_Match object; span=(3, 9), match='565fss'>
{'id': '565', 'name': 'fss'}

  

     身份证号解析
     aa= "220802198812011538" t=re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})",aa) print(t) print(t.groupdict())
打印

<_sre.SRE_Match object; span=(0, 10), match='2208021988'>
{'city': '02', 'birthday': '1988', 'province': '2208'}

  

re.split

split 方法按照能够匹配的子串将字符串分割后返回列表

     aa= "dd33ff55hh4466hhe"
        t=re.split("[0-9]+",aa)
        print(t)

  打印

['dd', 'ff', 'hh', 'hhe']

 

检索和替换

Python 的re模块提供了re.sub用于替换字符串中的匹配项

     aa= "dd33ff55hh4466hhe"
        t=re.sub("[0-9]+","|",aa)
        print(t)

  打印

dd|ff|hh|hhe

 

     re.I忽略大小写
     aa= "dddSS" t=re.search("[a-z]+",aa,flags=re.I) print(t) print(t.group())

  打印

<_sre.SRE_Match object; span=(0, 5), match='dddSS'>
dddSS

 

     aa= "dddSS\nfffk\nhhhhf"
        t=re.search("[a-z]+f$",aa,flags=re.I)
        print(t)
        print(t.group())

  打印

<_sre.SRE_Match object; span=(11, 16), match='hhhhf'>
hhhhf

     re.M 多行模式
     aa= "AAa\nfffk\nhhhhf" t=re.search("^f",aa,flags=re.M) print(t) print(t.group())

  打印

<_sre.SRE_Match object; span=(4, 5), match='f'>
f

 

 

aa = "Calc Result:6,Calc Resultis:4"
b = re.findall("Calc Result:(.*),Calc Resultis:(.*)",aa)
print(b)

[('6', '4')]

  

posted @ 2018-04-17 10:44  章豹  阅读(98)  评论(0编辑  收藏  举报