zoukankan      html  css  js  c++  java
  • python正则表达式

    python正则表达式re模块

     

    打文本中搜索某个字段

    python有个库 re

     

    import re

     

    正则表达式 . 点表示任意的字符

    [a-z] 这个位置一定是个小写a到z的字母

    print(lent(result))

     

    打文本中搜索某个字段

    python有个库 re

    import re

     

    正则表达式 . 点表示任意的字符

    [a-z] 这个位置一定是个小写a到z的字母

    print(lent(result))

    #!/usr/bin/python
    import re
    
    text=''
    file = open('shi.txt')
    for line in file:
    text=text+line
    file.close()
    
    result = re.findall('a[z-z][a-z]',text)
    
    print(result)
    

      

    result = re.findall(' (a.[a-z]) ',text) # 加上() 表示要括号里面的那些 其他的都不要

    这样左右两边的空格都去掉了

     

     

    去掉重复的结果方法:

    result = re.findall(' (a.[a-z]) ',text)

    result = set(result)

    print(result)

     

    上面的都是a开头的

    大写的呢:[Aa] 表示第一个字母可以是大写的A也可以是小写的字母a

     

    *可以匹配一个 多个或者没有

    a* :

    a

    aa

    aaaaaaaaaaaaaaaa

    空格*

    可以匹配很多个空格 ‘ *’可以有空格 可以有无数个空格

     

     

    result = re.findall(' *([Aa].[a-z]) ',text)

    竟然匹配除了 safe 的afe 原因:

    afe前面没有空格 后面有空格

    解决: 分两段过滤

    result = re.findall(' *([Aa].[a-z]) |([A].[a-z]) ',text)

    结果分两段 一对一对的

     

    看代码:

    两个括号 第一个括号没有匹配到的话 就用个空来表示 同理右边

    *可以匹配一个 多个或者没有
    a* :
    空
    a
    aa
    aaaaaaaaaaaaaaaa
    空格*
    可以匹配很多个空格 ‘ *’可以有空格 可以有无数个空格
    
    
    result = re.findall(' *([Aa].[a-z]) ',text) 
    竟然匹配除了 safe 的afe 原因:
    afe前面没有空格 后面有空格
    解决: 分两段过滤
    result = re.findall(' *([Aa].[a-z]) |([A].[a-z]) ',text)
    结果分两段 一对一对的
     
    看代码:
    两个括号 第一个括号没有匹配到的话 就用个空来表示 同理右边
    

      

    #!/usr/bin/python
    import re
    
    text=''
    file = open('shi.txt')
    for line in file:
    text=text+line
    file.close()
    
    result = re.findall(' *([Aa].[a-z]) |([A].[a-z]) ',text)
    
    final_result = set() #set()是个集合 
    for pair in result:
    if pair[0] not in final_result:
    final_result.add(pair[0]) #左边规则对应出来的叫pair[0]
    if pair[1] not in final_result:
    final_result.add(pair[1]) #右边规则对应出来的叫pair[1]
    final_result.remove('')
    print(final_result)
    

     

    稍微总结一下:

    .点 表示此位置有一个字符 任意的一个字符

     

    d 必须是一个数字

    d+ 至少有一个数字

    (区别 a* 可以匹配到空)

    用一下:

    #!/usr/bin/python
    import re
    
    
    text=''
    file=open('shi.txt')
    for line in file:
    text = text+line
    file.close()
    
    result = re.findall('d+',text)
    print (result)
    

      

    d{2} 刚好匹配到两个

    d{2,3}可以匹配到两到三个

    w 匹配一个字母 ‘A-Za-z’

    w{2,3}匹配两个或者三个字母

     

    以为某个字符开头的

    f=open('imooc.txt')
    
    for line in f:
    if line.startswith('imooc'):
    print line
    
    以某个字符开头和结尾的语句
    #!/usr/bin/python
    import re
    
    def find_start_imooc(fname):
    f=open(fname)
    for line in f:
    if line.startswith('mooc'):
    print line
    
    #find_start_imooc('imooc.txt')
    
    def find_in_mooc(fname):
    f=open(fname)
    for line in f:
    if line.startswith('imooc')
    and line.endswith('imooc
     '): #每一行结束都有/n
    print line
    find_in_mooc('imooc.txt')
    
    
    #!/usr/bin/python
    import re
    
    def find_start_imooc(fname):
    f=open(fname)
    for line in f:
    if line.startswith('mooc'):
    print line
    
    #find_start_imooc('imooc.txt')
    
    def find_in_mooc(fname):
    f=open(fname)
    for line in f:
    if line.startswith('imooc')
    and line[:-1].endswith('imooc'): #切片操作
    print line
    find_in_mooc('imooc.txt')
    

      

    匹配一下划线和字母开头的变量名

     

    s3='1 dsf se'

    s3.split() 返回切分好的

     

    res = r't[io]p'

    方括号里加^ 表示不包含 res = r't[^io]p'

     

    ^尖角号 用于行首 r"^hello" 只匹配 行首是 hello的

    $ 尾部 r"hello$" 只匹配行尾的

    "t[abc$]" 以a或b或c结尾 肯定不是这样的

    就像在[^abc]中 ^表示除了abc

     

    d 十进制 [0-9]

    D 非数字字符 [^0-9]

    s 任何空白字符 [ fv]

    S非空白字符 [^ fv]

    w任何字母数字 [a-zA-Z0-9]

    W非字母数字 [^a-zA-Z0-9]

     

    010_12345656

     

    r=r"^010-d{8}" 重复八次前面的规则 A{8} A重复8次

     

    *

    r=r"ab*" 0次至多次(一次也不出现)

     

    + 匹配一次或者多次 至少一次 与* 有区别

     

    ? 表示可有可无

     

    贪婪匹配 跟 非贪婪匹配

    r=r"ab+? " 这样以最少的匹配出来了 不会出现abbbbbbbb

     

    { } 关于花括号 {m,n}至少重复m次 至多重复n次

    r=r"a{1,3}"

     

     

    match() 返回一个对象 如果匹配上了的话

     

    csvt_re = re.compile(r'csvt', re.I)

    csvt_re.match('csvt hello')

    searcht() 不管在哪里 都能匹配 没有就不匹配了

    finditer 返回迭代器对象

    re=r'c..t'

    re.sub(rs,'python','csvt scat ')

     

    re.split(r'[+-*]',s)

     

     

  • 相关阅读:
    物理课件开发记录之一2013年10月25日
    以as中的泛型数组举一例看帮助手册优化的好处
    flash的显示列表的机制探索一
    组合模式
    actionscript中重写注意事项
    用adobe air写一个金鱼监控程序
    adobe air桌面应用程序在前端显示,类似于暴风的总是在桌面的最上方
    windows7下的cmd命令之powercfg命令,不常用的
    设置默认访问项目的客户端的浏览器版本(IE版本)
    防火墙设置对外开放端口
  • 原文地址:https://www.cnblogs.com/toov5/p/7523574.html
Copyright © 2011-2022 走看看