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: 对于灾难性的回溯问题(如果匹配不成功, 耗时长), 目前还没找到好的解决方案

  • 相关阅读:
    1.python的Helloword
    java实现多个属性排序---按照实体的多种属性值进行排序(ComparableComparator/ComparatorChain)
    Spring Boot 2.X(一):入门篇
    Nginx开启Gzip压缩提升页面加载速度
    QQ第三方授权登录OAuth2.0实现(Java)
    Windows下IIS搭建Ftp服务器
    【Java】支付宝获取人脸采集认证的图片base64格式
    【SpingBoot】spring静态工具类注入问题
    【linux】Tomcat 安装
    【linux】jdk安装及环境变量配置
  • 原文地址:https://www.cnblogs.com/reconova-56/p/13139539.html
Copyright © 2011-2022 走看看