• 正则表达


    import re
    m = re.match('.+t5','dfgt5ab')
    print (m)#dfgt5ab匹配成功
    m = re.match('t5','t5abcd')
    print (m)#t5abcd匹配成功,从开头就要匹配上
    m = re.search('[0-9]','ab45cf')
    print(m.group(0))#4匹配成功.不一定从开头就匹配上
    
    
    strr = re.sub('[0-9]', 'f', 'df34gg')
    print (strr)#dfffgg
    m = re.findall('[0-9]','54dgg5t')
    print (m)
    m = re.split('[0-9]','dgg55t')
    print (m)

    运行结果:

    <_sre.SRE_Match object; span=(0, 5), match='dfgt5'>

    <_sre.SRE_Match object; span=(0, 2), match='t5'>

    4

    dfffgg

    ['5', '4', '5']

    ['dgg', '', 't']

    注意match,search返回的是,匹配成功返回一个正则对象,不成功返回none. 我们可以调用group方法查看匹配到的字符串

    m=re.match(r'd+', '102300hhhj')

    print (m.group(0))#102300

    下面说下group

    下面一个正则表达式:

    output_(d{4})

    该正则表达式用括号()包围了一个小的正则表达式,d{4}。 这个小的正则表达式被用于从结果中筛选想要的信息(在这里是四位数字)。这样被括号圈起来的正则表达式的一部分,称为群(group)。

    我们可以m.group(number)的方法来查询群。group(0)是整个正则表达的搜索结果,group(1)是第一个群……

    import re
    m = re.search("output_(d{4})", "output_1986.txt")
    print (m.group(0))#output_1986
    print(m.group(1))#1986

    我们还可以将群命名,以便更好地使用m.group查询:

    import re
    m = re.search("output_(?P<year>d{4})", "output_1986.txt")   #(?P<name>...) 为group命名
    print(m.group("year"))

        

    关于反斜杠:

    由于正则表达式使用反斜杠来转义特殊字符,而python自身处理字符串时,反斜杠也是用于转义字符,这样就产生了一个双重转换的问题。

    1.比如说普通字符串里的 是换行符,那么正则表达式如何去表达字符串里的这个?答案是是用两个反斜杠,第一个反斜杠起到去掉后面那个反斜杠转义的作用,单纯的表示字符串里的

    m=re.match("\n"," ")

    print (m)#匹配成功

    2.字符串里一个在正则表达式里需要用两个表示,那么字符串里两个在正则表达式里则需要四个表示

    m=re.match("\\n","\n")

    print (m)#匹配成功

    m=re.match("\\n",r" ")

    print (m)#与上一个同理,匹配成功

    3.在正则表达式前置r表示兼容模式,可以理解为:兼容了正则表达式的规则的字符串,先说明一点,在字符串中,只有在有限的几个字符前面才表示转义,比如后面的这个字符是n,那这个是转义,或者后面的这个字符就是,那前面的第一个也是转义。但如果不是那几个字符,比如9,d,那么就不是转义了,就是单纯的反斜杠

    print ("x ")#是转义

    print ("\s")#第一个是转义,打印s

    print ("9")#不是转义,打印9

    print ("d")#不是转义,打印d

    所以,在python中字符串'\d'和'd'表示相同的字符 '\d' is 'd'

    但是d在正则表达式里确是整数的意思,在正则表达式前面加r,可以理解为,先把这个正则表达式看成字符串,并且这个字符串的规则里加入正则表达式的规则,而后形成的字符串,再去匹配后面的字符串

    m=re.match(r"d","5")

    print (m)#匹配成功,字符串d表示数字

    m=re.match(r"\d","\d")

    print (m)#匹配成功,把正则表达式视为加入了正则表达式转义规则的字符串,则\d为字符串\d

    m=re.match(r" "," ")

    print (m)#匹配长虹

    m=re.match(r"\n","\n")

    print (m)#匹配成功

    ret = re.findall(r'[1-9]',r'qq')

    print (ret)#[]

    ret = re.findall('[1-9]',r'qq')

    print (ret)#正则表达式不加r前缀,此处还是返回空列表,想象为什么

    除了d,正则表达式里还有-,d表示数字,-则表示-

    m=re.match(r'^d{3}-d{3,8}$', '010-12345')

    print (m)#匹配成功

  • 相关阅读:
    JS Function Arguments
    C# CuttingEdge.Conditions 验证帮助类库 文档翻译
    JS AngualrJs 指令
    每日踩坑 2018-06-19 AutoMapper简单性能测试
    C# 集合类-使用
    工具 EZDML表结构设计器
    unittest的discover方法
    转:unittest的几种运行方式
    unittest学习5-断言
    unittest学习4-跳过用例执行
  • 原文地址:https://www.cnblogs.com/saolv/p/9200580.html
Copyright © 2020-2023  润新知