zoukankan      html  css  js  c++  java
  • Day-13: 正则表达式

      正则表达式:

      由于程序中对字符串进行操作的情况实在太多,所以就诞生了正则表达式。它就是用来匹配字符串的。

      d匹配一个数字,w匹配一个字母或者数字,s匹配一个空格(包括Tab等空白符)

      *表示任意个字符,+表示一个字符,?表示0或者1个字符,{n}表示n个字符,{n,m}表示n-m个字符(数量表示符号要放在字符表示符号的后面)

      []里面表示范围

      [0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;

      A|B可以匹配A或B,^表示行的开头,$表示行的结束。

      正则表达式自身要转义表示,使用r''后就不用考虑正则表达式的转义。

      re模块:

    >>> import re
    >>> re.match(r'^d{3}-d{3,8}$', '010-12345')
    <_sre.SRE_Match object at 0x1026e18b8>
    >>> re.match(r'^d{3}-d{3,8}$', '010 12345')
    >>>

      match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None

    >>> re.split(r'[s\,;]+', 'a,b;; c  d')
    ['a', 'b', 'c', 'd']

      正则表达式中有()表示提取有分组,可以在match对象上用group()方法提取出子串来,group(0)表示原始字符串,group(1)表示第1个字符串。

    >>> m = re.match(r'^(d{3})-(d{3,8})$', '010-12345')
    >>> m
    <_sre.SRE_Match object at 0x1026fb3e8>
    >>> m.group(0)
    '010-12345'
    >>> m.group(1)
    '010'
    >>> m.group(2)
    '12345'

      re模块中方法运行时会先编译正则表达式,再去匹配。如果一个正则表达式要重复使用几千次,可以先预编译该表达式,之后就不需要编译该步骤了,直接匹配。

    >>> import re
    # 编译:
    >>> re_telephone = re.compile(r'^(d{3})-(d{3,8})$')
    # 使用:
    >>> re_telephone.match('010-12345').groups()
    ('010', '12345')
    >>> re_telephone.match('010-8086').groups()
    ('010', '8086')

      贪婪原则:正则表达式匹配时默认是贪婪匹配,尽可能多的匹配。

    >>> re.match(r'^(d+)(0*)$', '102300').groups()
    ('102300', '')

    由于d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串。

    必须用?换成非贪婪模式采用匹配出

    >>> re.match(r'^(d+?)(0*)$', '102300').groups()
    ('1023', '00')

      注:本文为学习廖雪峰Python入门整理后的笔记

  • 相关阅读:
    mallocbrk/mmap
    CMAKE相关
    cmake指定编译器版本及路径
    mmap 详解
    linux——tool 好好工具
    nm C /usr/lib/libstdc++.so.6 | grep runtime_error显示operator=存在
    程序可执行文件分析常用命令
    Linux中多种方法实时记录历史命令(转)
    HTML——CSS的基础语法1
    HTML的正确入门姿势——基本结构与基本标签
  • 原文地址:https://www.cnblogs.com/likely-kan/p/7528472.html
Copyright © 2011-2022 走看看