zoukankan      html  css  js  c++  java
  • python学习--re模块

    python内置模块, 利用一些特殊符号来方便处理字符串的操作

    1. python中re模块的常用方法

    1. match方法: 从头扫描字符串, 并返回第一个成功的匹配. (不太常用, 一般会用search方法替代)

    2. search方法: 扫描整个字符串, 并返回第一个成功的匹配.

    3. findall方法: 扫描整个字符串, 并返回所有成功的匹配. (如果匹配表达式中有多个分组, 则返回结果是List[tuple])

    4. sub方法: 实现字符串的替换. (对于复杂的字符串, 可以先用sub删除干扰内容, 再用search或findall匹配所需内容)

    2. python中re模块的常用正则匹配符号

    1. 匹配字符集中的任一个字符

    [abc]
    [^abc]
    [a-zA-Z]
    [0-9]
    View Code

    2. 设置匹配边界

    ^       # 匹配开始边界
    $       # 匹配结束边界
    View Code

    3. 设置重复正则出现的次数

    ?               0次或1次
    *               0次, 1次或多次
    +               1次或多次
    {n}             n次
    {n,}            n次以上
    {n,m}           n到m次
    
    # 注意: 当问号紧跟在限制符后面时,匹配模式为非贪婪匹配. 常见: .*?
    View Code

    4. 常见简化的正则标记

    d   # 匹配任一个数字  等价于 [0-9]
    s   # 匹配任一个空白字符
    w   # 匹配任意一位字母(大小写),数字或下划线    [a-zA-Z0-9_]
    .    # 匹配除换行符外的任一字符
    View Code

    3. 使用总结

    1. 常用的匹配模式有: re.S(有换行时用), re.X(支持给复杂正则写注释), re.I(匹配时忽略大小写)

    2. 可以对匹配内容进行分组, 同时分组可以取别名. 如: (?P<year>d{4}), 其中?P<year>表示是一个别名

    3. 常用的贪婪匹配模式为.*  非贪婪匹配模式为.*?  其中.表示任意以为字符 *表示一个量词 ?表示非贪婪标识符

    4. 使用套路: 尽量使用非贪婪匹配模式, 如果字符串有换行需要加上re.S参数, 同时使用小括号把匹配内容进行分组.

    4. 遗留问题

    问题1: 对于灾难性的回溯问题(如果匹配不成功, 耗时长), 目前还没找到好的解决方案

  • 相关阅读:
    UML 结构图之类图 总结
    UML 结构图之包图 总结
    UML 行为图之用例图 总结
    一位36岁程序员的困惑(转)
    某程序员转行前的感慨 告别程序员生涯
    PHP有前途吗?
    使用d3制作上下结构的股权穿透图
    elementUI实现动态拖拽表头、可拖拽列
    使用iview框架,如何进行输入框或者按钮的关联验证
    iview的Modal组件点击确定按钮如何阻止弹窗的关闭
  • 原文地址:https://www.cnblogs.com/reconova-56/p/13139539.html
Copyright © 2011-2022 走看看