zoukankan      html  css  js  c++  java
  • python re库的正则表达式学习笔记

    1. 安装

    默认已经安装好了python环境了

    re库是python3的核心库,不需要pip install,直接import就行

    2. 最简单的模式

    字符本身就是最简单的模式

    比如:'A', 'I love you', 'test'

    然是注意在定义模式字符串的时候,在前面加上r,它的作用是告诉编译器,接下来的字符串是单纯的字符串,请不要转变为转义字符

    例子

    import re
    pattern = r'Cookie'
    sequence = 'Cookie'
    re.match(pattern, sequence)
    <re.Match object; span=(0, 6), match='Cookie'>

    re.match()是常用的函数,如果匹配,返回的是re.Match object.一个库内置的对象。如果没有匹配返回的是None

    3. 通配符

    在正则表达式中,有些字符是有特殊意义的(不是转义字符的那套规则),下面介绍常用的通配符字符

    1)".":点,代表任何字符,除了换行(newline)

    re.search(r'Co.k.e', 'Cookie').group()

    其中group()函数返回匹配的字符,返回类型是str

    'Cookie'

    2) "w" 反斜杠小写w,代表任何单个字母,数字,下划线

    re.search(r'Cowkwe', 'Cookie').group()
    'Cookie'

    3) "W" 反斜杠大写W,代表任何2)中没有代表的字符

    re.search(r'CWke', 'C@ke').group()
    'C@ke'

    4) "s" 反斜杠小写s,代表一些空格字符,比如空格(space),换行(new line),跳格键(tab),回车(return)

    re.search(r'Eatscake', 'Eat cake').group()
    'Eat cake'

    5) "S" 反斜杠大写S,代表任何4)中没有代表的字符

    re.search(r'CookSe', 'Cookie').group()
    'Cookie'

    6) " " 反斜杠小写t,代表跳格键(tab)

    7) " " 反斜杠小写t,代表换行(new line)

    8) " " 反斜杠小写t,代表回车(return)

    9) "d" 反斜杠小写d,代表单个数字0-9

    re.search(r'cddkie', 'c00kie').group()
    'c00kie'

    10) "^" 这个键不知道叫什么,代表从字符开头要匹配

    re.search(r'^Eat', 'Eat cake').group()
    'Eat'

    11) "$" 美元符号,代表从字符结尾要匹配

    re.search(r'cake$', 'Eat cake').group()
    'cake'

    12) "[abc]" 中括号中任意字符,代表匹配其中任意字符

    常用的方式,比如[a-zA-Z0-9],或者如果中括号中第一个字符是"^",代表不是这个范围内的字符

    re.search(r'Number: [0-6]', 'Number: 5')
    <re.Match object; span=(0, 9), match='Number: 5'>

    再来个不在范围内的

    re.search(r'Number: [^0-6]', 'Number: 7')
    <re.Match object; span=(0, 9), match='Number: 7'>

    4. 重复

    第三部分介绍了单个通配符,那么怎么定义一串通配符呢,利用一些重复的标志

    1) "+" 加号,表示在它左边的字符出现一次或者多次

    re.search(r'Co+kie', 'Cooookie')
    <re.Match object; span=(0, 8), match='Cooookie'>

    2) "*" 乘号,表示在它左边的字符出现零次或者多次

    re.search(r'Ca*o*kie', 'Caokie').group()
    'Caokie'

    3) "?" 问号,表示在它左边的字符出现零次或者一次

    re.search(r'Colou?r', 'Color').group()
    'Color'

    4) {x} 大括号加数字,重复确切几次

    5) {x,} 重复至少几次

    6) {x, y} 重复至少x次,不超过y次

    re.search(r'd{9,10}', '0987654321').group()
    '0987654321'

    5. 分组

    比如说想定义一个email的格式,@之前的是一个规则,之后的是一个规则,那么通过()圆括号来分为两组,分别定义在一个正则表达式中

    然后如果满足的话,通过group()函数指定返回哪一组的结果

    比如

    email_address = 'Please contact us at: support@datacamp.com'
    match = re.search(r'([w+-]+)@([w.-]+)', 'tw7613781@gmail.com')
    if match:
      print(match.group()) # The whole matched text
      print(match.group(1)) # The username (group 1)
      print(match.group(2)) # The host (group 2)
    tw7613781@gmail.com
    tw7613781
    gmail.com

    @前为第一部分,w代表代表任何单个字母,数字,下划线,上面已经介绍了,然后就是"w"和"+"和"-"随便哪一个至少一个或者多个

    @后为第二部分,其余一样,就是多了个".",因为"."代表的是任意字符了,如果想表达真正的点,用"."来表示。

    6. python库函数re的常用函数

    1) re.search(pattern, string)和re.match(pattern, string)

    区别在于search能从string中寻找任何满足pattern的substring,但是match必须从头开始

    pattern = "cookie"
    sequence = "Cake and cookie"
    
    re.search(pattern, sequence).group()
    'cookie'

    如果是match会返回None

    2) re.findall(pattern, string)

    寻找string所有满足pattern的substring,然后以list的形式返回

    email_address = "Please contact us at: support@datacamp.com, xyz@datacamp.com"
    
    #'addresses' is a list that stores all the possible match
    addresses = re.findall(r'[w.-]+@[w.-]+', email_address)
    for address in addresses: 
        print(address)
    support@datacamp.com
    xyz@datacamp.com

    3) re.compile(pattern)

    通过compile函数会生成一个pattern对象,这个pattern对象可以直接使用match,search等函数

    In: pattern = re.compile(r"cookie")
    In: pattern
    Out: re.compile(r'cookie', re.UNICODE)
    In: pattern.search('cookie')
    Out: <re.Match object; span=(0, 6), match='cookie'>

    学习材料

    https://www.datacamp.com/community/tutorials/python-regular-expression-tutorial

  • 相关阅读:
    动态内存Treap
    最大流Dinic
    图的遍历
    Aho_Corasick自动机(AC自动机)
    邻接表
    COJ 3007 Mr.Yang的小助手
    COJ 0601&0602 动态规划(二)及加强
    Codeforces 603A Alternative Thinking
    HDU 2222 Keywords Search
    codeforce--600D
  • 原文地址:https://www.cnblogs.com/wtang/p/10490046.html
Copyright © 2011-2022 走看看