zoukankan      html  css  js  c++  java
  • 第6课-正则表达式

    1、元字符介绍

      "^" :^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。 

      "$"  :$会匹配行或字符串的结尾

      "" :不会消耗任何字符只匹配一个位置,常用于匹配单词边界 如 我想从字符串中"This is Regex"匹配单独的单词 "is" 正则就要写成 "is"  

      "d": 匹配数字

      "w":匹配字母,数字,下划线

      "s":匹配空格 

           ".":匹配除了换行符以外的任何字符

          "[abc]": 字符组  匹配包含括号内元素的字符 

    2、反义(写法很简单改成大写就行了,意思与原来的相反)

      "W"   匹配任意不是字母,数字,下划线 的字符

          "S"   匹配任意不是空白符的字符

      "D"  匹配任意非数字的字符

          "B"  匹配不是单词开头或结束的位置

         "[^abc]"  匹配除了abc以外的任意字符

    3、量词

    先解释关于量词所涉及到的重要的三个概念

        贪婪(贪心) 如"*"字符 贪婪量词会首先匹配整个字符串,尝试匹配时,它会选定尽可能多的内容,如果 失败则回退一个字符,然后再次尝试回退的过程就叫做回溯,它会每次回退一个字符,直到找到匹配的内容或者没有字符可以回退。相比下面两种贪婪量词对资源的消耗是最大的,

       懒惰(勉强) 如 "?"  懒惰量词使用另一种方式匹配,它从目标的起始位置开始尝试匹配,每次检查一个字符,并寻找它要匹配的内容,如此循环直到字符结尾处。

       占有  如"+" 占有量词会覆盖事个目标字符串,然后尝试寻找匹配内容 ,但它只尝试一次,不会回溯,就好比先抓一把石头,然后从石头中挑出黄金

      "*"(贪婪)   重复零次或更多( 例如"aaaaaaaa" 匹配字符串中所有的a  正则: "a*"   会出到所有的字符"a")

         "+"(懒惰)   重复一次或更多次(例如"aaaaaaaa" 匹配字符串中所有的a  正则: "a+"  会取到字符中所有的a字符,  "a+"与"a*"不同在于"+"至少是一次而"*" 可以是0次)

           "?"(占有)   重复零次或一次(例如"aaaaaaaa" 匹配字符串中的a 正则 : "a?" 只会匹配一次,也就是结果只是单个字符a)

          "{n}"  重复n次(例如从"aaaaaaaa" 匹配字符串的a 并重复3次 正则:  "a{3}"  结果就是取到3个a字符  "aaa")

      "{n,m}"  重复n到m次(例如正则 "a{3,4}" 将a重复匹配3次或者4次 所以供匹配的字符可以是三个"aaa"也可以是四个"aaaa" 正则都可以匹配到)

           "{n,}"  重复n次或更多次

    4、懒惰限定符

       "*?"   重复任意次,但尽可能少重复 

      "+?"  重复1次或更多次,但尽可能少重复

          "??"  重复0次或1次,但尽可能少重复

          "{n,m}?"  重复n到m次,但尽可能少重复

      "{n,}?"    重复n次以上,但尽可能少重复

    5、分组

         ()正则中捕获分组其实就是一个括号内的内容

           |:匹配多个字符串或表达式

           转义字符()和原始字符串(r)

    6、练习

    import re
    s="""693152032@qq.com, werksdf@163.com, sdf@sina.com
    
        sfjsdf@139.com, soifsdfj@134.com
    
        pwoeir423@123.com"""
    
    res = re.findall(r"w+@w+.com",s)
    content = re.sub(r"w+@w+.com","285469451@qq.com",s)
    
    print(content)
    
    
    s="""i love you not because of who 234 you are, 234 but 3234ser because of who i am when i am with you"""
    
    result = re.findall(r"[a-zA-Z]+",s)
    content = re.sub(r"d+w*",r"",s)
    print(content)
    
    s = "-100.01"
    res = re.match(r"-?(d|[1-9]d+).d+",s)
    print(res)
    
    # 将变量转换为鸵方的形式
    s = "get-element-by-id"
    
    def convet(value):
        return str(value.group()).upper()
    content = re.sub("-w",convet,s)
    print(content)
    
    s = "10101111"
    res = re.search("[01]+",s)
    print(res.group())
    
    s = "我的办公电话是:000-12344562,有问题请及时与我联系,谢谢!"
    res = re.findall("d{3}-d{8}",s)
    print(res)
    
    s = "目前可以分配到的IP地址为:255.221.221.12"
    res = re.findall("d{3}.d{1,3}.d{1,3}.d{1,3}",s)
    print(res)
    
    s = "<a herf='www.baidu.com'>"
    
    res = re.search("<as(.+)>",s)
    print(res.group(1))
    
    
    s = "12345678901"
    
    content = re.sub("d{3}",lambda value:"{}.".format(value.group()),s)
    print(content)
    

      

  • 相关阅读:
    Feign调用文件上传服务接口样例
    Feign调用文件下载服务接口样例
    使用Spring Security的Basic Auth认证后Postman的POST请求不成功的可能原因
    Spring Boot应用的Controller返回的集合类数据是XML格式的可能原因
    Eureka Server增加Spring Security后的服务端和客户端配置
    Spring Data支持的关键字
    JPA(Hibernate)代理类的hibernateLazyInitializer属性系列化异常
    Spring Boot中fastjson的@JSONField(format = "yyyy-MM-dd HH:mm:ss")失效可能原因
    使用Java代码配置MyBatis Generator
    CentOS8.1中搭建Nexus3服务器
  • 原文地址:https://www.cnblogs.com/win0211/p/12082716.html
Copyright © 2011-2022 走看看