zoukankan      html  css  js  c++  java
  • 正则表达式与re模块

    一,正则表达式(http://tool.chinaz.com/regex/

    正则表达式本身与python没什么关系,就是匹配字符串内容的一种规则,只和字符串相关。

    定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符、及这些特殊字符的组合,组合一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

    1,字符组,[字符组],在同一位置可能出现的各种字符组成一个字符组,在在正则表达式中用[]表示。

    2,元字符:. , 匹配除换行符以外的任意字符

          w,匹配字符或数字或下划线,W,匹配非字母或下划线或数字

          s,匹配任意空白字符,S,匹配非空白字符

          d,匹配数字,         D,匹配非数字

          ,匹配一个换行符, ,匹配一个制表符,,匹配一个单词的结尾

          ^,匹配字符串的开始,$,匹配字符串的结尾,a|b,匹配字符a或字符b

          (),匹配括号内表达式,也表达一个组

          [...],匹配字符组中的字符,[^...],匹配除了字符组中字符的所有字符

    3,量词

    *,+,?,{n},{n,},{n,m},默认情况下,采用贪婪匹配。尽可能匹配长的字符串。

    在量词后面加?,就是非贪婪匹配,尽可能匹配短的字符串。

    转义符,python中,在字符串前加r,例r“d”

      .*?的用法:.*?x,就是取前面任意长度的字符,直到一个x出现

    二,re模块

    re模块下的常用方法

    import re
    # ret=re.findall("s","she is girs")   #返回所有满足匹配条件的结果,放在列表里
    # print(ret)
    # ret=re.search("s","zhe is girs").group() #函数会在字符串内查找,只找到第一个匹配,就返回一个包含信息的对象,该对象可以
    # print(ret)                               #通过调用group()方法得到匹配的字符串,如果没有,则返回None,调用group会报错
    # ret=re.match("a","zhe is girs")          #和search一样,但在字符串开始处匹配,匹配不到,就没有,报错
    # print(ret.group())
    # ret=re.split("[ab]","abdf")   #先按"a"分割得到""和"bdf",再对""和"bdf"分别按"b"分割,结果['', '', 'df']
    # print(ret)                     #如果不加中括号,则按"ab"分割,结果['', 'df']
    # ret=re.subn("d","r","we1rer23g4")   #将数字替换成"r",返回元组(替换的结果,替换了多少次(可设置))
    # print(ret)
    # see=re.compile("d{3}")            #将正则表达式编译成为一个正则表达式对象,规则要匹配的3个数字
    # ret=see.search("asd34r345rr")
    # print(ret.group())                    #345
    # ret=see.sub("d","r","we1rer23g4",1)            #将数字替换成"r",参数1表示只替换一个
    # print(ret)
    # ret=re.finditer("d","da3gf4h4")           #finditer返回一个存放匹配结果的迭代器
    # print(ret)               #<callable_iterator object at 0x000000A9CF8800F0>
    # print(next(ret).group())
    # print(next(ret).group())
    # print([i.group()for i in ret])
    # for i in ret:
    #     print(i.group())

    优先级

    #findall的优先级
    # ret=re.findall("www.(biadu|oldboy).com","www.oldboy.com")
    # print(ret)         #['oldboy']      这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
    #
    # ret=re.findall("www.(?:biadu|oldboy).com","www.oldboy.com")
    # print(ret)         #['www.oldboy.com']
    
    
    # split的优先级
    # ret=re.split("d","eva4your3yuan2she")
    # print(ret)       #['eva', 'your', 'yuan', 'she']
    # ret=re.split("(d)","eva4your3yuan2she")
    # print(ret)       #['eva', '4', 'your', '3', 'yuan', '2', 'she']
    # #在匹配部分加上()之后所切出来结果是不同的
    # #没有()的没有保留所匹配的项,但有()的可以保留匹配的项

          

  • 相关阅读:
    Longest Palindromic Substring
    PayPal MLSE job description
    Continuous Median
    Remove Duplicates From Linked List
    Valid IP Address
    Longest substring without duplication
    Largest range
    Subarray sort
    Multi String Search
    Suffix Trie Construction
  • 原文地址:https://www.cnblogs.com/glf1160/p/8252899.html
Copyright © 2011-2022 走看看