• 正则表达式


     

    import re

    str = "Iss study Python3.6 Everyday"

    # 1. ^ :开头

    result = re.match("^I",str)     # I

    print(result.group())

     

    # 2. . : 任意字符

    result = re.match("^I.",str)    # Is

    print(result.group())

     

    # 3. * :0/1/多个【前】一个字符

    result = re.match("^Is*",str)    # Iss

    print(result.group())

     

     

    # 4. ? : 非贪婪

    # .* 可以为空或字符串

    # group() 用来提出分组截获的字符串,括号()用来分组

    # group() = group(0)  pccccccccccccppeng123

    str1 = "pccccccccccccppeng123"

    result1 = re.match(".*(p.*p).*",str1)     # 贪婪 (从右到左)

    print(result1.group(1))  # pp

    result2 = re.match(".*?(p.*p).*",str1)    # 非贪婪(从左到右,第一个符合条件)

    print(result2.group(1))  # pccccccccccccpp

    result3 = re.match(".*?(p.*?p).*",str1)

    print(result3.group(1))  # pccccccccccccp

     

    str2 = "pcccpccccccccppeng123"

    result3 = re.match(".*?(p.*?p).*",str2)

    print(result3.group(1))  # pcccp

    result4 = re.match(".*(p.*?p).*",str2)

    print(result4.group(1))  # pp

    result5 = re.match(".*?(p.*p).*",str2)

    print(result5.group(1))  # pcccpccccccccpp

     

    # 5. {1} {1,,} {2,5}  限定字符个数

    str3 = "dccpccpapbbbbpeng123"

    result6 = re.match(".*(p.{1}p).*",str3)  # p与p中间只有一个字符

    print(result6.group(1)) # pap

    result6 = re.match(".*(p.{2}p).*",str3)  # p与p之间只有2个字符

    print(result6.group(1)) # pccp

    result6 = re.match(".*(p.{3,}p).*",str3) # p与p之间有3个及以上字符

    print(result6.group(1)) # pbbbbp

    result6 = re.match(".*(p.{1,3}p).*",str3) # p与p之间有1到3个字符

    print(result6.group(1)) # pap

     

     

    # 6. | : 或

    str4 = "dcpeng123"

    result6 = re.match("(dcpeng|dcpeng123)",str4)

    print(result6.group(1)) # dcpeng

    result6 = re.match("(dcpeng123|dcpeng)",str4)

    print(result6.group(1)) # dcpeng123

    result6 = re.match("(dcpeng1234|dcpeng)",str4)

    print(result6.group(1)) # dcpeng

    result6 = re.match("(dcpeng|dcpeng123)123",str4)

    print(result6.group(1)) # dcpeng

    result6 = re.match("(dcpeng1234|dcpeng123)",str4)

    print(result6.group(1)) # dcpeng123

     

    result6 = re.match("((dcpeng|dcpeng123)123)",str4)

    # dcpeng123  最外面的括号是group(1) 里面的括号是group(2)

    # group(1) 以123匹配到depeng123 ,所以是depeng123

    # group(2) 以(dcpengsss|dcpeng)123这个区匹配,所以是dcpeng

    print("re",result6.group(1))

    result6 = re.match("((dcpengsss|dcpeng)123)",str4)

    print("re",result6.group(2)) # dcpeng

    result6 = re.match("((dcpengs|dcpen)123)",str4)

    # print("re",result6.group(2)) # result6 为 None

     

    # 7、 [] : 满足括号中的任意一个字符即可

    str5 = "dcpeng123"

    result7 = re.match("([abcd]cpeng12)",str5)

    print(result7.group(1)) # dcpeng12

    result7 = re.match("([abc]cpeng12)",str5)

    # print(result7.group(1)) # None

     

    str5 = "13955696026"

    result7 = re.match("(1[3458][0-9]{9})",str5)

    print(result7.group(1)) # 13955692026

    result7 = re.match("(1[7458][0-9]{9})",str5)

    # print(result7.group(1)) # None

    # 这里^不是开头的意思,是取反的意识

    result7 = re.match("(1[3458][^1]{9})",str5)

    print(result7.group(1))   # 13955696026

    result7 = re.match("(1[3458][^0]{9})",str5)

    # print(result7.group(1))  # None

    str5 = "aaabhshabsa"

    result7 = re.match(".*(b[a-z]{2})",str5) # ()中不能用^ (^b[a-z]{2})是错误的

    print("sss",result7.group(1)) # bsa

    注意:

    一、[]中括号中的任意一个字符,如[abcd],代表a、b、c、d这四个字符中的任意一个。

    二、表示区间,如[0-9],代表数字0到9中的任意一个。同理[a-z],[A-Z]

    三、[^]表示非或者取反,如匹配模式[^1]表示匹配的字符不为1。

    四、[.]或[*]就是纯粹的代表“.”号和“*”号,不再是代表特殊字符中代表的任意字符或出现多次的意思,这点需要特别注意。

     

    # 8、 s : 空格  S : 非空格

    str6 = "加 油"

    result8 = re.match("(加s油)",str6)

    print(result8.group(1))     # 加 油   一个空格

    result8 = re.match("(加s+油)",str6)

    print(result8.group(1))     # 加 油   + 表示1个或多个空格

     

    str6 = "加加油"

    result8 = re.match("(加S油)",str6)

    print(result8.group(1))    # 加加油   S 只有一个非空格

    result8 = re.match("(加S+油)",str6)

    print(result8.group(1))    # 加加油     S 一个或多个非空格

     

    # 9、 w  : 表示0-9、a-z、A-Z和_中的任意字符

    #     W  : 表示除去0-9a-zA-Z和_

    str7 = "努a力"

    result9 = re.match("(努[0-9a-zA-Z_]力)",str7)

    print(result9.group(1))  # 努a力

    result9 = re.match("(努w力)",str7)

    print(result9.group(1))  # 努a力

    str7="努w力"

    result9 = re.match("(努w力)",str7)

    print(result9.group(1))  # 努a力

    str7="努_力"

    result9 = re.match("(努w力)",str7)

    print(result9.group(1))  # 努a力

    result9 = re.match("(努-力)",str7)

    if result9:

        print(result9.group(1))  # 努a力

    else:

        print("无")

    str7 = "努#力"

    result9 = re.match("(努W力)",str7)

    print(result9.group(1))  # 努#力

     

    # 10、[u4E00-u9FA5]: 汉字

    str8 = "加油"

    result10 = re.match("([u4E00-u9FA5])",str8)

    print(result10.group(1)) # 加  默认匹配一个汉字

    result10 = re.match("([u4E00-u9FA5]+)",str8)

    print(result10.group(1)) # 加油

    str8 = "加a油"

    result10 = re.match("([u4E00-u9FA5]+)",str8)

    print(result10.group(1)) #

    str8 = "加油a"

    result10 = re.match("([u4E00-u9FA5]+)",str8)

    print(result10.group(1)) # 加油

    str8 = "加 油a"

    result10 = re.match("([u4E00-u9FA5]+)",str8)

    print(result10.group(1)) #

     

    str8 = "XXX gradutes from 清华大学"

    result10 = re.match(".*?([u4E00-u9FA5]+大学)",str8) # 非贪婪,从左边开始

    print(result10.group(1)) # 清华大学

     

    str8 = "XXX gradutes from 清华大学"

    result10 = re.match(".*([u4E00-u9FA5]+大学)",str8) # 非贪婪,从左边开始

    print(result10.group(1)) # 华大学  贪婪,从右边到左边

     

    # 11、 d : 数字

    str9 = "xxx出生于1995年"

    result11 = re.match(".*(d+)年",str9)

    print(result11.group(1))  # 5 d+ 表示多个数字 不是1995,原因是贪婪模式

    result11 = re.match(".*?(d+)年",str9)

    print(result11.group(1))  # 1995

    result11 = re.match(".*(d{4})年",str9)

    print(result11.group(1))  # 1995  这样也可以的

     

     

     

     

  • 相关阅读:
    c#实现冒泡、快速、选择和插入排序算法
    数据库>SQL Server>循环游标读取例子
    《道德经》程序员版第二章
    跨域访问JQuery+.NET实现的一种思路,以及极简单Demo
    《道德经》程序员版第三章
    ASP.NET初级>传智播客.net>第十一季asp.net中级 文字总结(未完)
    <div>里包含<p>标签疑问
    互联网音乐赚钱模式
    JQuery调用WebService,以及JS把单斜杠转换成双斜杠
    《道德经》程序员版第一章
  • 原文地址:https://www.cnblogs.com/fangsheng/p/10305219.html
Copyright © 2020-2023  润新知