python正则表达式

 

正则表达式通常用来匹配和搜索

 

特殊字符:

.     匹配任意单个字符   除去 \r \n  

    import re
    myname = "my name is\nxiaofan!"
    m=re.findall(r'.',myname)
    print(m)

 

    ['m', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', 'x', 'i', 'a', 'o', 'f', 'a', 'n', '!']

 

*    匹配前面子表达式的 0次到多次    (贪婪) 

    import re
    myname = "my name is\nxiaofan!"
    m=re.findall(r'my*',myname)
    print(m)

 

    ['my', 'm']

 

?   屁前面的表达式  0次到1次     (贪婪)

    import re
    myname = "xiaoo"
    m=re.findall(r'o?',myname)
    print(m)

 

    ['', '', '', 'o', 'o', '']

 

+    匹配前的表达式 1次到多次      (贪婪)  

    import re
    myname = "xiaoo ao o tt "
    m=re.findall(r'o+',myname)
    print(m)

    ['oo', 'o', 'o']

^    开头

$    结尾   

    import re
    name="xiaofan fanf"
    m=re.findall(r'^x',name)
    m1=re.findall(r'^x.*f$',name)
    m2=re.findall(r'f$',name)
    print(m)
    print(m1)
    print(m2)

  

    ['x']
    ['xiaofan fanf']
    ['f']

 

(......)  匹配括号里面的内容可以用 \n 来调用

 

\w    匹配所有的字母数字下划线

\W    匹配所有的非数字字母下划线

\d    匹配所有的数字

\D    匹配所有的非数字

\s     匹配空白字符

\S    匹配非空白字符

 

    import re
    name="xiaofan123!@# "
    m=re.findall(r'\w',name)
    m1=re.findall(r'\W',name)
    m2=re.findall(r'\d',name)
    m3=re.findall(r'\D',name)
    m4=re.findall(r'\s',name)
    m5=re.findall(r'\S',name)
    print(m)
    print(m1)
    print(m2)
    print(m3)
    print(m4)
    print(m5)

 

    ['x', 'i', 'a', 'o', 'f', 'a', 'n', '1', '2', '3']
    ['!', '@', '#', ' ']
    ['1', '2', '3']
    ['x', 'i', 'a', 'o', 'f', 'a', 'n', '!', '@', '#', ' ']
    [' ']
    ['x', 'i', 'a', 'o', 'f', 'a', 'n', '1', '2', '3', '!', '@', '#']

 

[a-z]       小写字母

[A-Z]      大写字母

[a-zA-Z]    大小写字母

    import re

    name="XiaoFan"
    m=re.findall(r'[a-z]',name)
    m1=re.findall(r'[A-Z]',name)
    m2=re.findall(r'[a-zA-Z]',name)
    print(m)
    print(m1)
    print(m2)

 

    ['i', 'a', 'o', 'a', 'n']
    ['X', 'F']
    ['X', 'i', 'a', 'o', 'F', 'a', 'n']

 

 

|      匹配 | 两边的任意一种字符

[^]     匹配非括号当中的字符

    import re
    name="XiaooFann"
    m=re.findall(r'a|o',name)
    m1=re.findall(r'[^A-Z]',name)
    print(m)
    print(m1)

 

    ['a', 'o', 'o', 'a']
    ['i', 'a', 'o', 'o', 'a', 'n', 'n']
    ['o', 'o']

 

{m,n}     匹配出现m~n 次的

{n}         匹配出现n次的

    import re
    name="aaabaaca"
    m=re.findall(r'a{1,2}',name)
    m1=re.findall(r'a{2}',name)
    print(m)
    print(m1)

    ['aa', 'a', 'aa', 'a']
    ['aa', 'aa']

 

 

re.S    修改.的匹配模式,让.可以匹配到\n

re.M    修改\n 的匹配方式

re.l     忽略大小写

 

 

re.findall       从指定的字符串中匹配所有满足正在描述的问题,返回列表

re.search      从字符串中匹配一次指定规则

re.match      从字符串中开头匹配一次指定的规则

re.compile     形成正则模型

re.sub           替换,和replace相似

re.split         分隔,和字符串的split相似

 

    import re
    test="daadaad"
    t1=re.search(r'a',test)
    t2=re.match(r'a',test)
    print(t1)
    print(t1.group())
    print(t2)

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

 

 

    tt=re.sub(r'^x','X',"xiaofan")
    print(tt)

    Xiaofan

 

 

    t=re.split('-','xiao-fan')
    print(t)

    ['xiao', 'fan']

 

posted @ 2016-09-24 13:46  xuanhui  阅读(130)  评论(0)    收藏  举报