zoukankan      html  css  js  c++  java
  • Python学习笔记8:标准库之正則表達式

    Python拥有强大的标准库。从如今起,開始学习标准库中提供的一些经常使用功能。
    首先看正則表達式(regular expression),它的主要功能是从字符串(string)中通过特定的模式(pattern),搜索想要找到的内容。


    比如:要从一个字符串中找出全部的数字,我们能够这样做:

    import re
    str = "int2str"
    m = re.search("[0-9]",str)
    print(m.group(0))
    输出:2
    re.search()接收两个參数,第一个正則表達式。是匹配条件。
    re.search()假设从第二个參数是目标字符串。


    返回一个对象m,通过m.group()查看搜索到的结果;没有找到。则返回None。

    经常使用函数:
    m = re.search(pattern, string)搜索整个字符串,直到发现符合的子字符串。
    m = re.match(pattern, string)从头開始检查字符串是否符合正則表達式。必须从字符串的第一个字符開始就相符。
    对于返回的m, 我们使用m.group()来调用结果。



    str = re.sub(pattern, replacement, string)在string中利用正则变换pattern进行搜索,对于搜索到的字符串,用还有一字符串replacement替换。
    返回替换后的字符串str。

    re.split()依据正則表達式切割字符串, 将切割后的全部子字符串放在一个表(list)中返回
    re.findall()依据正則表達式搜索字符串。将全部符合的子字符串放在一给表(list)中返回


    正則表達式:
    1)单个字符:


    .          随意一个字符


    a|b        字符a或字符b


    [afg]      a或者f或者g的一个字符


    [0-4]      0-4范围内的一个字符


    [a-f]      a-f范围内的一个字符


    [^m]       不是m的一个字符


    s         一个空格


    S         一个非空格


    d         [0-9]


    D         [^0-9]


    w         [0-9a-zA-Z]


    W         [^0-9a-zA-Z]


    2)反复


    紧跟在单个字符之后,表示多个这样类似的字符


    *         反复 >=0 次


    +         反复 >=1 次


    ?         反复 0或者1 次


    {m}       反复m次。比方说 a{4}相当于aaaa,再比方说[1-3]{2}相当于[1-3][1-3]


    {m, n}    反复m到n次。

    比方说a{2, 5}表示a反复2到5次。

    小于m次的反复,或者大于n次的反复都不符合条件。
    比如:
    [0-9]{3,5}       9678


    a?b              b


    a+b              aaaaab


    3) 位置


    ^         字符串的起始位置


    $         字符串的结尾位置


    比如:
    正则表达 相符的字符串举例 不相符字符串


    ^ab.*c$ abeec cabeec


    4)返回控制


    有可能对搜索的结果进行进一步精简信息。比方以下一个正則表達式:
    output_(d{4})


    该正則表達式用括号()包围了一个小的正則表達式。d{4}。 这个小的正則表達式被用于从结果中筛选想要的信息(在这里是四位数字)。
    这样被括号圈起来的正則表達式的一部分。称为群(group)。
    我们能够m.group(number)的方法来查询群。group(0)是整个正则表达的搜索结果,group(1)是第一个群……

    import re
    m = re.search("output_([0-9]{4})", "output_1986.txt")
    print(m.group(0),m.group(1))
    输出:
    ('output_1986', '1986')


    我们还能够使用(?P<name>...)为group命名,以便更好地使用m.group查询:
    import re
    m = re.search("output_(?P<year>[0-9]{4})", "output_1986.txt")
    print(m.group("year"))

    输出:1986


    坚持每天都能学一点新东西。好了。今天就先到这里了。

  • 相关阅读:
    Django ORM操作
    两张表是一对一的关系为什么不直接都放在一张表里面?
    TCP、UDP 详解
    如何使用Xshell连接虚拟机
    selenium中常见的无法定位元素问题
    python中生产者消费者模式
    Selenium 点击后跳转至新窗口无法定位元素问题(element not interactable)
    linux 网络管理
    Linux文件权限
    linux 用户管理命令
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6801397.html
Copyright © 2011-2022 走看看