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

    print("正则表达式")
    import re,string
    s = r'abc'     #    r''原样输出,不转义
    print(re.findall(s,'aabaab'))  #findall()匹配字符串中所有对应规则的字符
    print(re.findall(s,'aabcaabc'))
    print('
    hi
    ')
    print(r'
    hi
    ')
    print("------------------------------------------结束")
    
    
    #"."表示除换行符以外的任意字符,  S表示不是空白符的任意字符,注意是大写S
    s = 'hi,i am a student.my name is Hilton.'
    print(re.findall(r'i',s))
    print(re.findall(r'.',s))
    print(re.findall(r'i.',s))
    print(re.findall(r'iS',s))
    print("------------------------------------------  ....SSS结束")
    
    
    #"[]"表示指定字符集,比如:[abc],[a-z],[0-9]
    #元字符在方括号中不起作用,例如:[akm$]和[m.]中元字符都不起作用,
    #注意用过的数字不会重新用,比如r'x[^3]x'规则,有个字符串x8x4x,这里只算x8x,不会x4x,因为4前面的x被用过了
    s = 'map mit mee mwt meqwt'
    print(re.findall(r'me',s))
    print(re.findall(r'm[iw]t',s)) #[iw]表示里面的任意一个
    print(re.findall(r'm[.]',s)) #元字符在方括号无效
    s = '0x12x3x567x8xyxyx'
    print(re.findall(r'x[0123456789]x',s))
    print(re.findall(r'x[0-9]x',s)) #[0-9]表示在0-9的任意数字
    print(re.findall(r'x[^3]x',s)) #[^3]表示除了3之外的任意字符
    print("------------------------------------------[][][]结束")
    
    
    #“^":匹配行首(一行的第一个),匹配以^后面的字符开头的字符串,注意和上面的[^]是不同概念
    #如果是以什么开头,比如15开头就使用15,表示匹配单词头或单词尾
    s = 'hello hello world hello Mary hello John'
    print(re.findall(r'hello',s))
    print(re.findall(r'^hello',s)) #^hello表示字符中第一个出现的单词
    print("------------------------------------------^^^^^^^行首结束")
    
    
    # "$":匹配行尾,匹配以 $ 之前的字符结束的字符串
    # $ 还可以结合{n}限定出现的,比如  .{8}$ 表示除换行符的任意字符只能出现8次,后面的$就是限定只能是8次,如果不加$表示可以出现8次或8次以上
    print(re.findall(r'hello$',s))  #这里表示以hello结束的行,但是没有,返回[]
    s = 'hello hello world hello Mary hello'
    print(re.findall(r'hello$',s))  #这次有了,s重新以hello结尾
    s = 'map mit mee mwt meqmtm$'
    print(re.findall(r'm[aiw]$',s)) #[aiw]$:表示以方括号里的任意字符结尾
    print(re.findall(r'm[aiwt$]',s)) #这里$元字符在[]里面,无效
    print(re.findall(r'm[aiwt$]$',s)) #[aiw$]$:表示以方括号里的任意字符结尾,$在[]算普通字符
    s = '12345678901'
    #这里表示,以12开头,然后第三位数字只能是[1-6]中的数字,后面的{1}表示只能出现1次,
    # .{8}$表示除换行符任何字符可出现8次,注意$限定了后面的数字为8个,如果不加$表示出现8次后,还可以出现
    print(re.findall(r'12[1-6]{1}.{8}$',s))
    print("------------------------------------------$$$结束")
    
    
    
    #"":反斜杆后面可以加不同的字符以表示不同的特殊意义
    # 匹配单词头或单词尾;
    # B和相反,匹配非单词头或单词尾
    #  d匹配任何十进制数,相当于[0-9]
    #  D于d相反,匹配任何非数字字符,相当于[^0-9]
    #  s匹配任何空白字符,相当于[	
    
    fv]
    #  S于s相反,匹配任何非空白字符,相当于[^	
    
    fv]
    #  w匹配任何字母,数字或下划线字符,相当于[a-zA-Z0-9]
    #  W于w相反,匹配任何非字母,数字和下划线字符,相当于[^a-zA-Z0-9]
    # 也可以用于取消所有的元字符: \ , [
    # 这些特殊字符都可以包含在[]中,如:[s,.]匹配任何空白字符,","或"."
    
    s = '0x12x3x567x8xy'
    print(re.findall(r'[0-9]',s))
    print(re.findall(r'd',s))
    print(re.findall(r'[xd]',s))
    print("------------------------------------------反斜杠\\\结束")
    
    
    
    #正则表达式除了能匹配不定长的字符集,还能指定正则表达式的一部分的重复次数
    #所涉及的元字符有  *   +   ?    {} 四个字符
    s = 'a ab abbbbb abbbbbbxa'
    
    # * :匹配位于 * 之前的字符或子模块的0次或多次出现
    print(re.findall(r'ab*',s))
    print("------------------------------------------****结束")
    
    
    # + :匹配位于+ 之前的字符或子模块的1次或多次出现
    print(re.findall(r'ab+',s))
    print("------------------------------------------++++结束")
    
    # ? :匹配位于? 之前的0个或1个字符
    #当 ? 紧随其他限定符(* + {n}  {n,}  {n,m})之后时,匹配模式是”非贪心的”。
    # "非贪心" 的模式匹配搜索到尽可能短的字符串,而默认的“贪心” 的模式匹配搜索到的,尽可能长的字符串。
    print(re.findall(r'ab+',s))  #最大模式,贪心模式
    print(re.findall(r'ab+?',s))   #最小模式,非贪心模式
    print("------------------------------------------?????结束")
    
    srint = 'hi,i am a student.my name is Hilton.'
    #i.*e表示i后面跟0个或多个除换行符以外的任意字符(最大模式匹配,贪心的)再跟字母e
    print(re.findall(r'i.*e',s)) 
    # i.*?e表示i后面跟0个或多个除换行符之外的任意字符,后面的?表示最小模式匹配(非贪心的),然后跟字母e
    print(re.findall(r'i.*?e',s))
    print("------------------------------------------.*?.*?.*?结束")
    
    
    #{m,n}  :表示至少有 m 个重复,至多有 n 个重复 。 m,n均为十进制数
    #忽略m表示0个重复,忽略n表示无穷多个重复。
    #{n}$表示可以出现的次数
    #{0,} 等同于 *       {1,}等同于 +      {0,1}与 ?相同。但是如果可以的话,最好使用* + ?
    s = 'a b baaaaba'
    print(re.findall(r'a{1,3}',s))
    s = '021-33507yyx,021-33507865,010-12345678,021-123456789'
    print(re.findall(r'021-d{8}',s))
    print(re.findall(r'021-d{8}',s))
    print("------------------------------------------{}{}{}{}结束")
    
    
    #练习
    #随机生成10个长度为1-25之间,由字母、数字、和_  .  #  % 特殊字母组成的字符串构成列表,
    #找出列表符合下列要求的字符串:长度为5-20,必须以字母开头、可带数字或 _ .
    import string,random
    z = []
    x = string.ascii_letters+string.digits+"_.#%"
    for i in range(10):
        y = [random.choice(x) for i in range(random.randint(1,25))]
        z.append(''.join(y)) #join把列表的元素,转为字符串,''是为了合并字符串
    print('列表:',z)
    print('满足要求的字符串是:')
    
    r = r'^[a-zA-Z]{1}[a-zA-Z0-9._]{4,19}$' #条件
    for i in z:
        if re.findall(r,i):
            print(i)
  • 相关阅读:
    HDU 5392 Infoplane in Tina Town
    HDU 2206 IP的计算(字符串处理)
    线程的条件变量实例
    CentOS安装配置Samba
    PO订单审批拒绝API
    【Java集合源代码剖析】Hashtable源代码剖析
    magento megatron主题加入中文
    递归系列2(字符串翻转,12345翻转)
    机器学习之&&Andrew Ng课程复习--- 聚类——Clustering
    JSP基础
  • 原文地址:https://www.cnblogs.com/unlasting/p/12840477.html
Copyright © 2011-2022 走看看