zoukankan      html  css  js  c++  java
  • Python正则表达式 学习笔记

    python第一个正则表达式

    1. import re : python正则表达式模块
    2. 第一个正则表达式
    re.compile(r'imooc')
    pattern.match('imooc python')
    示例:
    import re
    pa = re.compile(r'imooc') #返回一个Pattern类型对象pa
    ma = pa.match('imooc python') #返回一个match对象ma
    print ma.group() #获得匹配结果
    print ma.span() #获得匹配区间
    print ma.string #匹配字符串
    print ma.re #pattern对象
     
    pa = re.compile(r'imooc', re.I)    # I == ignore,忽略大小写地匹配
    ma = pa.match('iMoOc python')
    print ma.group()
     
    pa = re.compile(r'(imooc)') #加入小括号,放到group里
    ma = pa.match('imooc python')
    print ma.groups()
     
    ma = re.match(r'imooc', 'imooc python') #直接匹配
    print ma.group()
     
    Python正则表达式语法
    字符
    匹配
    .
    匹配任意字符(除了 )
    [...]
    匹配字符集
    d / D
    匹配数字/非数字
    s / S
    匹配空白/非空白字符
    w / W
    匹配单词字符[a-zA-Z0-9]/非单词字符
    单字符匹配示例:
    import re
    ma = re.match(r'.', 'abc0')
    print ma.group()
    ma = re.match(r'{[abc]}', '{b}')
    print ma.group()
    ma = re.match(r'[a-z]', 'a')
    print ma.group()
    ma = re.match(r'[[w]]', '[a]')
    print ma.group()
     
    字符
    匹配
    *
    匹配前一个字符0次或无限次
    +
    匹配前一个字符1次或无限次
    ?
    匹配前一个字符0次或1次
    {m} / {m.n}
    匹配前一个字符m次到n次
    *? / +? / ??
    匹配模式变为非贪婪(尽可能少匹配字符)
    示例:
    # -*- coding: utf-8 -*-
    import re
    ma = re.match(r'[A-Z][a-z]*', 'Aa')
    print ma.group()
    ma = re.match(r'[_a-zA-z]+[_w]*', '_helloWorld01') #匹配一个变量名
    print ma.group()
    ma = re.match(r'[0-9]?[0-9]', '28') #匹配0到99
    print ma.group()
    边界匹配
    字符
    匹配
    ^
    匹配字符串开头
    $
    匹配字符串结尾
    A / 
    指定的字符串必须穿现在开头/结尾
    示例:
    import re
    ma = re.match(r'^[w]{4,10}@163.com$', 'imooc@163.com')
    print ma.group()
    ma = re.match(r'Aimooc[w]*', 'imooc python')
    print ma.group()
    分组匹配
    字符
    匹配
    |
    匹配左右任意一个表达式
    (ab)
    括号表达式作为一个分组
    <number>
    引用编号为num的分组匹配到的字符串
    (?P<name>)
    分组起一个别名
    (?P=name)
    引用别名为name的分组匹配字符串
    示例:
    # -*- coding: utf-8 -*-
    import re
    ma = re.match(r'[0-9]?d$|100', '100') #匹配0到100
    print ma.group()
    ma = re.match(r'[w]{4,6}@(163|126).com', 'imooc@126.com')
    print ma.group()
    ma = re.match(r'<([w]+>)1', '<book>book>')
    print ma.group()
    ma = re.match(r'<([w]+>)[w]+</1', '<book>python</book>') #
    print ma.group()
    ma = re.match(r'<(?P<mark>[w]+>)[w]+</(?P=mark)', '<book>python</book>')
    print ma.group()
     
    re模块的其他方法
    1:search(pattern, string, flags=0)
        在一个字符串中查找匹配
    2:findall(pattern, string, flags=0)
        找到匹配,返回所有匹配部分的列表
    3:sub(pattern, repl, string, count, flags=0)
        将字符串中匹配正则表达式的部分替换为其他值
    4:split(pattern, string, maxsplit=0, flags=0)
        根据匹配分割字符串,返回分割字符串组成的列表
    示例:
    import re
    pa = re.compile('<[w]+>')
    ma = re.search(pa, '<a><b><c><d><efg>h<i>')
    print ma.group()
    pa = re.compile('<[w]+>')
    L = re.findall(pa, '<a><b><c><d><efg>h<i>')
    print L
    s = re.sub(r'd+', '2016', 'I was born in 1993')
    print s
     
    def add1(match):        # repl位函数的sub函数
        val = match.group()
        num = int(val)+1
        return str(num)
    s = re.sub(r'd+', add1, 'I was born in 1993, you are born in 1992')
    print s
     
    l = re.split(r':| |,', 'imooc:C C++ Java Python,C#')
    print l
     
    练习
    抓取网页中的图片到本地
    1:抓取网页
    2:抓取图片地址
    3:抓取图片内容并把存到本地
     
  • 相关阅读:
    CF1221D Make The Fence Great Again
    HDU.1536.S-Nim(博弈论 Nim)
    HDU.1848.Fibonacci again and again(博弈论 Nim)
    POJ.1704.Georgia and Bob(博弈论 Nim)
    洛谷.2197.nim游戏(博弈论 Nim)
    博弈论基础——巴什博弈
    SPOJ.104.Highways([模板]Matrix Tree定理 生成树计数)
    BZOJ.4289.PA2012 Tax(思路 Dijkstra)
    BZOJ.4753.[JSOI2016]最佳团体(01分数规划 树形背包DP)
    图论
  • 原文地址:https://www.cnblogs.com/moonlightpoet/p/5677391.html
Copyright © 2011-2022 走看看