zoukankan      html  css  js  c++  java
  • 正则表达式

    正则表达式

    是什么?  通过一个规则,来从一段字符串中找到符合规则的内容/判断某段字符串是否符合规则

    有什么用?

    注册页/网页上 要求你输入一个信息 判断你输入的信息是否格式正

    爬取数据 从网页上把代码以字符串的形式下载回到内存,提取这个大字符串中我想要的内容了

    正规规则

    1.字符组    约束字符中某一个字符位置上的值是什么,只要是出现在字符组中的内容都算匹配到了

    2.'[3-9]'  从小到达的顺序到底是根据 asc码的顺序来的

    3.匹配数字  [0-9] 匹配字母[A-Za-z]   匹配数字和字母[0-9a-zA-Z]

    元字符:

    元字符 匹配内容
    . 匹配除换行符意外的任意字符
    w 匹配字母或数字或下划线
    s 匹配任意的空白符
    d 匹配数字
    匹配一个换行符
    匹配一个制表符
     匹配一个单词的结尾
    ^ 匹配字符串的开始
    $ 匹配字符串的结尾
    W 匹配非字母或数字或下划线
    D 匹配非数字
    S 匹配非空白符
    a|b 匹配字符a或字符b
    () 匹配括号内的表达式,也表示一个组
    [...] 匹配字符组中的字符
    [^...] 匹配除了字符组中字符的所有字符

    量词 :

    量词 用法说明
    * 重复零次或者更多次
    + 重复一次或更多次
    ? 重复零次或一次
    {n} 重复n次
    {n,} 重复n次或更多次
    {n,m} 重复n到m次

     

     findall 和 分组的问题
    import re
    # ret = re.findall('d+(?:.d+)?','1.2345+4.3')
    # ?:写在一个分组的最开始,表示在findall方法中取消这个分组的优先级
    # 1.2345  4.3
    # .2345   .3
    # print(ret)
    # ret= re.search('d+(.d+)?','1.2345+4.3')
    # print(ret.group())
    
    # ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
    # print(ret)
    
    # search
    # ret = re.match('d+', 'hello,alex3714')
    # print(ret)
    
    # 'aa|bb'.split('|')
    # split中如果带有分组,会在分割的同时保留被分割内容中带分组的部分
    # ret = re.split('(dd)','alex83wusir38egon20')
    # print(ret)
    
    # ret = re.sub('d+','sb','alex83wusir38egon20',2)
    # print(ret)
    
    # ret = re.subn('d+','sb','alex83wusir38egon20')
    # print(ret)
    
    # 节省时间
    # obj = re.compile('d{3}')  #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
    # print(obj)
    # ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串
    # print(ret.group())
    # ret = obj.search('abc444eeee') #正则表达式对象调用search,参数为待匹配的字符串
    # print(ret.group())
    
    # finditer
    # 迭代功能的
    # findall
    
    # 节省空间的
    # ret = re.finditer('d+','12aas14jsk38947cjhxj83')
    # print(ret)
    # for i in ret:
    #     print(i.group())
    
    # 基础查找 findall(分组优先显示) search match
    # 替换分割 split(分组保留) sub subn
    # 代码优化 compile finditer
    
    # 分组命名
    # html标签语言
    # html是一种代码
    # 对于浏览器来说 浏览器和代码之间有一种约定
    # 写在一个标识符之内的代码 可以有一种独立的格式
    # 标识符
    # <h1>sgjkagjgdjkf</h1>
    
    # 给分组起名字 (?P<tag>正则表达式),使用分组的名字(?P=tag)
    # ret = re.search('<(?P<tag>w+?)>w+</(?P=tag)>',"<b>hello</b>")
    # print(ret.group())
    # print(ret.group('tag'))
    
    # 根据分组的索引使用分组 1,1是分组的索引值
    # ret = re.search(r'<(w+?)>w+</1>',"<b>hello</b>")
    # print(ret.group())
    # print(ret.group(1))
    
    # ret = re.search(r"<(w+)>w+</1>","<h1>hello</h1>")
    # ret.group(1)
    
    # ret = re.finditer(r'<(w+?)>w+</1>',"<b>hesakdfkhfkllo</b>")
    # for i in ret:
    #     print(i.group(1))
    #     print(i.group())
  • 相关阅读:
    Annotation
    GIT的作用以及Versioncontrol为什么要用GIT
    Http协议
    人工智能的可怕与不可怕
    Makefile简易教程
    Node.js 学习笔记之一:学习规划 & 认知 Node.js
    《大教堂与集市》的启示 — 软件工程的另一种选择
    Git简易教程
    谈谈买书与读书
    clang编译器简介
  • 原文地址:https://www.cnblogs.com/liuafan/p/9300350.html
Copyright © 2011-2022 走看看