Day 17正規表現

9209 ワード

正規表現
  • 正規表現(汎用構文)正規表現は、文字列マッチングを行うためのツールであり、異なる記号で異なる文字
  • をマッチングする
  • python正規表現のサポートreモジュールを介して正規表現をサポートする方法fullmatch(正規表現、一致する文字列)--->正規表現と指定した文字列でマッチングし、マッチングに成功してマッチングオブジェクトを返すと、マッチングの失敗はNone pythonの正規表現が文字列に書かれていることを返します.しかし一般的にはr/Rを前に加算します
  • 普通文字(代表文字そのもの
    #        ,      ,         a,b,c
    re_str = r'abc'
    result = fullmatch(re_str, 'abc')
    print(result)
    
        :
    <_sre.sre_match object="" span="(0," match="abc">
    
  • . (任意の文字に一致する)任意の文字を表す点が現れ、1つの点は1つの文字
  • を表す.
    """
      :a.         
          b.
    """ # , , a, , c re_str = r'a.c' result = fullmatch(re_str, 'a\c') print(result) : <_sre.sre_match object="" span="(0," match="a\\c">
  • w(アルファベットを表す下線に一致)
  • """
      :a.       
         b.  \w        
    """
    #        ,           ,         、    _,     abc
    re_str = r'.\w\wabc'
    result = fullmatch(re_str, '$ _abc')
    print(result)
    
        :
    <_sre.sre_match object="" span="(0," match="$ _abc">
    
  • s(空白文字に一致)
  • """
        :             ,    、   、   
    """
    #        ,               ,        ,         
    re_str = r'\w\w\s.'
    result = fullmatch(re_str, 'a_\t$')
    print(result)
    
        :
    <_sre.sre_match object="" span="(0," match="a_\t$">
    
  • d(一致数字文字)
    #           ,          
    re_str = r'\d\d\d'
    result = fullmatch(re_str, '789')
    print(result)
    
        :
    <_sre.sre_match object="" span="(0," match="789">
    
  • b(単語境界を検出)
  • """
    a.        \b            
    b.                    
      :   ,  ,    ,      
    
      :\b      ,         ,               
    """
    #              'how are',    a        
    re_str = r'\bhow\b are'
    result = fullmatch(re_str, 'how are')
    print(result)
    print(search(r'\b\d\d\d', 'ada 456qwe123asdasd78'))
    
        :
    <_sre.sre_match object="" span="(0," match="how are">
    <_sre.sre_match object="" span="(4," match="456">
    
  • ^(検出文字列先頭)
    """
                  ,                   ,         ,       
    """
    re_str = r'^\d\d\d'
    result = search(re_str, '789asdjak45897asd78')
    print(result)
    
        :
    <_sre.sre_match object="" span="(0," match="789">
    
  • $(検出文字列末尾)
  • #               ,                 
    re_str = r'\d\d\d$'
    result = search(re_str, 'asdasda4563')
    print(result)
    
        :
    <_sre.sre_match object="" span="(8," match="563">
    
  • B(非単語境界検出)
    re_str = r'a\Babc'
    result = search(re_str, 'aabc')
    print(result)
    
        :
    <_sre.sre_match object="" span="(0," match="aabc">
    
  • W(数字以外のアルファベットの下線に一致する中国語)
  • S(空白以外の文字に一致)
  • D(数字以外の文字に一致)
  • [文字セット](文字セットに一致する任意の文字)
    """
    a.    
    [   ]  -               
    b.    
    [  1-  2]  -      1   2      ,    1         2    
    [a-zA-z123]  -         123      
    [a-zA-Z\d_]  -         
    """
    #         4   ,       a  b  c        ,   123
    re_str = r'[abc]123'
    result = fullmatch(re_str, 'a123')
    print(result)
    
    #         4   ,      a-z      ,         ,       1-9      
    re_str = r'[a-z]\d\d[1-9]'
    result = fullmatch(re_str, 's875')
    print(result)
    
        :
    <_sre.sre_match object="" span="(0," match="a123">
    <_sre.sre_match object="" span="(0," match="s875">
    
  • [^文字セット]-非文字セットに一致する任意の文字
    """
      :^    []                      
                          ^   
    """
    #        ,         abc            ,   123
    re_str = r'[^abc]123'
    result = fullmatch(re_str, 's123')
    print(result)
    
    #        ,                       ,   123
    re_str = r'[^A-Za-z]123'
    result = fullmatch(re_str, '5123')
    print(result)
    
        :
    <_sre.sre_match object="" span="(0," match="s123">
    <_sre.sre_match object="" span="(0," match="5123">
    
  • エスケープ記号
    """
    a.               '\'        
    \\ --  \  
    \.  --  .  
      :            ,
                         
    
    b.               ,      []        
        -  :                  ,         ,           ,        
        ^  :               ,        ,        
        ]  :   []      ,  \
    """
    re_str = r'\d\d\.\d\d'
    print(fullmatch(re_str, '78.45'))
    
    print(fullmatch(r'[.]', '.'))
    print(fullmatch(r'[.]', '2'))
    
        :
    <_sre.sre_match object="" span="(0," match="78.45">
    <_sre.sre_match object="" span="(0," match=".">
    None
    

  • マッチング回数
  • *(マッチング0回または複数回)
    """
      *  -         0     (                   )
    
    a*  -  a  0     
    \d  -        0     
    [a-z]* -           0    
    """
    # 123   0      ,          a
    re_str = r'a*123'
    print(re.fullmatch(re_str, 'aa123'))
    print(re.fullmatch(re_str, '123'))
    
    # 123   0      ,            
    re_str = r'[a-z]*123'
    print(re.fullmatch(re_str, 'asd123'))
    print(re.fullmatch(re_str, '123'))
    
        :
    <_sre.sre_match object="" span="(0," match="aa123">
    <_sre.sre_match object="" span="(0," match="123">
    <_sre.sre_match object="" span="(0," match="asd123">
    <_sre.sre_match object="" span="(0," match="123">
    
  • +(1回または複数回一致)
    re_str = r'[a-z]+123'
    print(re.fullmatch(re_str, 'asd123'))
    print(re.fullmatch(re_str, '123'))
    
        :
    <_sre.sre_match object="" span="(0," match="asd123">
    None
    
  • ? (マッチング0回または1回)
    re_str = r'[a-z]?123'
    print(re.fullmatch(re_str, 'asd123'))
    print(re.fullmatch(re_str, '123'))
    print(re.fullmatch(re_str, 'w123'))
    
    #   :        ,            
        """
        123
        +123
        -123
        0023       
        """
        re_str = r'[-+]?[1-9]\d|0*'
        print(re.fullmatch(re_str, '456'))
        print(re.fullmatch(re_str, '+456'))
        print(re.fullmatch(re_str, '0'))
    
        :
    None
    <_sre.sre_match object="" span="(0," match="123">
    <_sre.sre_match object="" span="(0," match="w123">
    
  • {}
    """
    {M,N}  -    M N     M   N 
    {M,}   -    M 
    {,N}  -    N 
    {N}    -    N 
    
    """
    print(re.fullmatch(r'a{2,5}', 'aaa'))
    
    #     :6-16 ,         
    re_str = r'[a-zA-z\d]{6,16}'
    print(re.fullmatch(re_str, 'asdasd7896'))
    
        :
    None
    None
    <_sre.sre_match object="" span="(0," match="0">
    <_sre.sre_match object="" span="(0," match="aaa">
    <_sre.sre_match object="" span="(0," match="asdasd7896">
    

  • 合計グループ化
  • |(分之)式1|式2|式3-まず式1でマッチングし、成功すれば成功し、成功しなければ式2を使用し、その後順次行う(3つの式のうち1つが成功すれば成功し、3つが満足しなければ失敗する)
  • ()(パケット)a.パケット-かっこの内容を1つの全体と見なすb.パケット繰返し−パケットを含む正規表現で再パケット可能な後に、前のいくつかのパケットが一致した内容(d{2})abc1-->7878
    re_str = r'[a-z]{3}|\d{3}'
    print(re.fullmatch(re_str, '879'))
    
    re_str = r'abc([A-Z]{2}|\d{2})'
    print(re.fullmatch(re_str, 'abc45'))
    
    # (abc){2}  abc        2 
    re_str = r'(abc){2}'
    print(re.fullmatch(re_str, 'abcabc'))
    
    re_str = r'\d{2}abc'
    print(re.fullmatch(re_str, '34abc'))
    
    re_str = r'(\d{2})a(\d{3})bc\2'
    print(re.fullmatch(re_str, '34a123bc123'))
    
        :
    <_sre.sre_match object="" span="(0," match="879">
    <_sre.sre_match object="" span="(0," match="abc45">
    <_sre.sre_match object="" span="(0," match="abcabc">
    <_sre.sre_match object="" span="(0," match="34abc">
    <_sre.sre_match object="" span="(0," match="34a123bc123">