zoukankan      html  css  js  c++  java
  • Python正则总结

    re总结

    限定符(就是控制重复次数)

    ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。
    * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
    + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
    {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
    {n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
    {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

    定位符

    ^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 或 之后的位置匹配。
    $ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 或 之前的位置匹配。
     匹配一个字边界,即字与空格间的位置。
    B 非字边界匹配。

    字符分类

    d 0 到 9 的任何数字
    D 除 0 到 9 的数字以外的任何字符
    w 任何字母、数字或下划线字符(可以认为是匹配“单词”字符)
    W 除字母、数字和下划线以外的任何字符
    s 空格、制表符或换行符(可以认为是匹配“空白”字符)
    S 除空格、制表符和换行符以外的任何字符

    自己的字符分类

    []
    [abc]匹配方括号内的任意字符(诸如 a、b 或 c)。
    [^abc]匹配不在方括号内的任意字符。

    Python中用法

    search 和 match

    import re
    
    print("# 检验是否为大小写")
    s1 = 'adkkdak'
    s2 = 'abc123efg'
    
    lowerRe = re.search('^[a-z]+$', s1)
    if lowerRe:
        print(s1, "全为小写")
    else:
        print(s1, "不全为小写")
    
    lowerRe = re.match('[a-z]+$', s2)
    if lowerRe:
        print(s2, "全为小写")
    else:
        print(s2, "不全为小写")
    
    

    究其因

    1. 正则表达式不是python的一部分,利用时需要引用re模块

    2. 匹配的形式为: re.search(正则表达式, 带匹配字串)或re.match(正则表达式, 带匹配字串)。两者区别在于后者默认以开始符(^)开始。因此,re.search('^[a-z]+$', s1) 等价于 re.match('[a-z]+$', s2)

    3. 如果匹配失败,则an = re.search('^[a-z]+$', s1)返回None

    compile 和 findall

    print("# 匹配数字")
    s1 = "12aa123bb1234cc12345dd"
    s = []
    testRe = re.compile('d+')
    for i in testRe.findall(s1):
        s.append(i)
    print("s1 = ", s1)
    print(" ".join(s))
    
    1. compile就是创建一个表达式对象,就是好调用些

    2. findall其实就会返回一个列表,所以用for i in 没毛病

    3. group。一般括号里的都会有group()
      例子:

    import re
    a = "123abc456"
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)   #123abc456,返回整体
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)   #123
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)   #abc
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)   #456
    
  • 相关阅读:
    一段c++程序
    一个简单的实现奇 偶判断的代码
    标签记忆法设想
    心算 进制转换 心得 =》 任意进制的数 转 任意进制的数
    PHP面试题
    commons-net使用FTP进行文件下载导致内容乱码的原因
    java中的各种锁机制
    HBase写入过快性能分析及调优
    Hbase Export与Import完成数据迁移
    Linux环境下Oracle19C使用数据泵impdp命令导入dmp文件
  • 原文地址:https://www.cnblogs.com/wudongwei/p/9157526.html
Copyright © 2011-2022 走看看