zoukankan      html  css  js  c++  java
  • python_字符串&正则表达式

    正则表达式: 1.字符串模糊匹配,2.字符串有条件匹配

    Re.match() 从开头开始匹配的

    Re.match().group(), 得到匹配结果

    Re.search() 从中间开始匹配,只匹配一次就返回

    Re.findall() 找到所有的符合的条件,结果放在一个列表中

     “$” 符号匹配的是  字符串最后一个字符,目标字符串是以 $前面的字符结尾

    re.split()  以匹配的内容作为分割符

    re.sub()  替换字符串中符合条件的匹配项 

    import re
    
    str = "yangguo8890long110"
    res = re.match("yangguod",str)   #match 必须从开头开始匹配
    result = res.group()   #得到匹配结果
    print(result)
    
        #1 '.'     默认匹配除
    之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
    res1 = re.match("^.","yangguo8890long110")
    print(res1)
    print(res1.group())
    res1 = re.match("yang.","yangguo8890long110")
    print("1",res1)    #<_sre.SRE_Match object; span=(0, 5), match='yangg'>
    
        #2 '^'     匹配字符开头,以某个字符开头,可以指定flags MULTILINE,
    res2 = re.match("^yangguod","yangguo8890long110")
    print(res2) #<_sre.SRE_Match object; span=(0, 8), match='yangguo8'>
    
        # 3'$'     匹配的目标字符串 str 必须以$前面的字符结尾,或e.search("foo$","bfoo
    sdfsf",flags=re.MULTILINE).group()也可以
    res3 = re.search("l.+0$","yangguo8890long120")
    print("3",res3)   #3 <_sre.SRE_Match object; span=(11, 18), match='long120'>
    res3 = re.search("l.+1$","yangguo8890long120")
    print("3",res3)   #3 None
    
        # 4'*'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb', 'ab', 'a']  #表示*前面的b是可有可无的,但a必须存在
        # 5'+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']          #表示+前面的必须以ab开头,b可有多个
    res5 = re.search("l[a-z]+g","yangguo8890longnv1208")   #可以表示以某个字符结束
    print(res5)  #<_sre.SRE_Match object; span=(11, 15), match='long'>
    res5 = re.search("998.+998","yang 998guoxiao998 .s")  #匹配 998中间的字符,表示以 *开头,以* 结尾
    print(res5) #<_sre.SRE_Match object; span=(5, 18), match='998guoxiao998'>
    # 6'?' 匹配?前面的一个字符1次或0次 res6 = re.search("889?","yannngguang889huan") print(res6)#<_sre.SRE_Match object; span=(11, 14), match='889'> res6 = re.search("889?","yannngguang88huan")#?前面的一个字符可以不匹配 print(res6)#<_sre.SRE_Match object; span=(11, 13), match='88'> res6 = re.search("889?","yannngguang8huan") print(res6)#None
    #
    7'{m}' 匹配前一个字符m次 res7 = re.search("[0-9]{3}","ya4nn1n5gg6ua7ng892huan") #匹配连续的三个数字 print(res7)#<_sre.SRE_Match object; span=(16, 19), match='892'>
    # 8'{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb'] res8 = re.search("[0-9]{2,3}","ya4nn1n5gg6ua17ng892huan") #匹配连续的两个数字或者连续的三个数字 print(res8)#<_sre.SRE_Match object; span=(13, 15), match='17'> res8 = re.findall("[0-9]{1,3}","ya4nn1n5gg6ua17ng892huan") #匹配所有的数字,最多三位 print(res8)#['4', '1', '5', '6', '17', '892']
    #
    9'|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC' res9 = re.search("123|abc","uyunjabckih123") print(res9)
    #
    10'(...)' 分组匹配,把括号里的字符看做一个整体,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c res10 = re.search("(123){2}.+(i){2}","yuhiinyi123123iyhii321")#匹配123 两次 print(res10) # 11'A' 只从字符开头匹配,re.search("Aabc","alexabc") 是匹配不到的 # 12'' 匹配字符结尾,同$ # 13'd' 匹配数字0-9 # 14'D' 匹配非数字 res14 = re.search("D+","234HKJU98+()") print(res14) #<_sre.SRE_Match object; span=(3, 7), match='HKJU'> res14 = re.findall("D+","234HKJU98+()") print(res14)#['HKJU', '+()'] # 15'w' 匹配[A-Za-z0-9] # 16'W' 匹配非[A-Za-z0-9] # 17's' 匹配空白字符、 、 、 , re.search("s+","ab c1 3").group() 结果 ' ' #18'[a-z]' 匹配所有小写字母一次 #19'[A-Z]' 匹配所有大写字母一次 #20'[a-zA-Z]' 匹配所有写字母一次,不分大小写

    2. 分组匹配,可有将匹配的字符直接转换成字典

        groupdict()方法

    a = re.search("(?P<province>[0-9]{2})(?P<city>[0-9]{2})(?P<town>[0-9]{2})(?P<birthday>[0-9]{8})","511243199802241714").groupdict()
    print(a) #{'province': '51', 'city': '12', 'town': '43', 'birthday': '19980224'}
    #?P 为语法定义,P为大写,在<>中放入字典的键,后面为匹配的内容

    3. re.split() #以匹配的内容作为分割符,生成一个列表

    s1 = re.split("[a-z]","123abc78ab9cdeg00t8")
    print(s1)#['123', '', '', '78', '', '9', '', '', '', '00', '8']
    s2 = re.split("[a-z]+","123abc78ab9cdeg00t8")
    print(s2)#['123', '78', '9', '00', '8']

    4.re.sub() 替换字符串中符合条件的匹配项 

    s3 = re.sub("[a-z]+","$","123abc78ab9cdeg00t8") #将所有字符替换成$
    print(s3)#123$78$9$00$8
    s4 = re.sub("[a-z]+","$","123abc78ab9cdeg00t8",count = 3) #将字符替换成$,替换3 次
    print(s4)#123$78$9$00$8

    5,改变匹配模式

    re.I(re.IGNORECASE): 忽略大小写
    re.M(MULTILINE): 多行模式,改变'^'和'$'的行为
    re.S(DOTALL): 点任意匹配模式,改变'.'的行为,可有匹配换行
    # re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
    r = re.search("[a-z]+","adTYHad")
    print(r)#<_sre.SRE_Match object; span=(0, 2), match='ad'>
    rf = re.search("[a-z]+","adTYHad",flags=re.I)
    print(rf)#<_sre.SRE_Match object; span=(0, 7), match='adTYHad'>
    
    # re.M(MULTILINE): 多行模式,改变'^''$'的行为
    
    # re.S(DOTALL): 点任意匹配模式,改变'.'的行为,可有匹配换行
    s = re.search(".+","yhi
    7907")
    print(s)#<_sre.SRE_Match object; span=(0, 3), match='yhi'>
    s = re.search(".+","yhi
    7907",flags= re.S)  
    print(s)#<_sre.SRE_Match object; span=(0, 8), match='yhi
    7907'>

      

     
  • 相关阅读:
    Ubuntu JDK 安装及环境配置
    流式计算之Storm简介
    Amcharts 提示 字体找不到解决方法
    Amcharts 入门教程
    JavaMail 发送邮件简单 Demo
    JavaMail 发送邮件,以及sina、163、QQ服务器不同的解析结果(附图)
    MyEclipse 搭建 hadoop 环境
    淘宝主搜索体验
    【转】Net中VSS实现版本控制管理的一些使用方法
    IIS配置PHP环境(快速最新版)
  • 原文地址:https://www.cnblogs.com/gongfuxiaozhen/p/8698373.html
Copyright © 2011-2022 走看看