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)
    

      

  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/win0211/p/12082716.html
Copyright © 2011-2022 走看看