Python---正規表現


Python正規表現
正規表現は特殊な文字シーケンスであり、文字列がパターンに一致しているかどうかを簡単にチェックすることができます.reモジュールはPython言語にすべての正規表現機能を持たせる.
  • 正則はreモジュールを使用し、import reを使用して呼び出す必要がある.
  • match;最初から一致するだけで、一致すると結果オブジェクトが返され、見つからない場合はNoneが返されます.
  • search:任意の位置からマッチングすると、マッチングは結果オブジェクトに戻り、すべて単一のマッチング(見つかったら検索を停止します)です.
  • findall:すべて一致し、結果に一致したすべてのリストを返しますが、空のリストが見つかりません.
  • compile:作成された正規表現を作成し、作成された正規オブジェクトとコンテンツを別々に操作できる
  • .
    import re
    r=re.match('abc', 'abchadajabcadjlae')#        
    print(r.group())#        
    print(r.span())#         ,       ,(    ,    )
    #  :abc
         (0, 3)
         
    m= re.match('abc', 'hadajabccadjlae')#         
    print(r)
    #  :None
    
    s= re.search('abc', 'hadajabccadjlae')
    print(s.group())
    print(s.span())
    #  :abc
    	  (5, 8)
    	  
    f = re.findall('cba','ahkjdcbasdkjalcbasakldjacba')
    print(f)
    #  ;['cba', 'cba', 'cba']
    
    

    以上、compileを使用して正規表現オブジェクトを生成できます.仕事関数は次のように使用します.
    c=re.compile('cba')
    f = c.findall('ahkjdcbasdkjalcbasakldjacba')
    print(f)
    #  ;['cba', 'cba', 'cba']
    

    正規表現構文
    1文字の一致:
  • []:中央の任意の文字[abc]:abcの任意の文字[0-9]:任意の数字文字[a-zA-Z]:任意の文字[^0-9]:非数字文字(数字以外の文字)に一致[^...]:[]にない文字
  • . :’’’以外の任意の文字
  • d:数値文字[0-9]
  • に相当
  • D:数値以外の文字は[^0-9]
  • に等しい
  • w:一致字(数字、アルファベット、下線)漢字も
  • を含む.
  • W:非文字(w逆の内容)
  • にマッチ
  • s:空白文字(、r、t、スペース)
  • S:空白以外の文字(sの反対の内容)
  • b:語境界(先頭、末尾、スペース、句読点)
  • c=re.findall('\w','n3\\\!@#h  ')
    print(c)
    #    :['n', '3', 'h', ' ', ' '
    
    c=re.findall('\d','sd2dsd4eds18d5d')
    print(c)
    #    :['2', '4', '1', '8', '5']
    
    
    

    回数制限前の1文字を修飾する回数
  • *:
  • が任意に発生
  • +:少なくとも1回
  • ?:最大1回(1回またはなし)
  • {m}:出現回数を指定
  • {m,n}:m<=回数<=n
  • {m,}:少なくともm回
  • {,m}:最大m回
  • a=re.findall('\d+','sd2dsd4eds18d5d')
    print(a)
    #    :['2', '4', '18', '5']
    a=re.findall('\d{2,3}','sd2d4ed18d235dsd3467d12')
    print(a)
    #    :['18', '235', '346', '12']
    
    a=re.findall('\d{2,}','sd2d4ed18d235dsd3467d12')
    print(a)
    #    :['18', '235', '3467', '12']
    

    境界の定義
  • ^:指定された内容で始まる
  • $:指定されたコンテンツの末尾
  • a=re.findall('^hello', 'asjdhelloaskd')
    print(a)
    #    :[]
    f = re.findall('world$', 'asjdhelloaskworld')
    print(f)
    #    :['world']
    
  • パケットマッチング
  • c=re.compile('(\d+)([a-z]+)(\d+)')
    s=c.search('hddh23hxhjja45hhj')
    if s:
         # 0:        ,          ,      ()     
        print(s.group(0), s.span(0))#    23hxhjja45   (4, 14)
        print(s.group(1), s.span(1))#    23  (4, 6)	
        print(s.group(2), s.span(2))#    hxhjja  (6, 12)
        print(s.group(3), s.span(3))#    45  (12, 14)
        
    #findall:        ,    () ,     ()     
    a=re.findall('w(ab)sd','qwabsde')
    print(a)#    ['ab']
    
  • 正則切断
  • #         ,             
    #         
    string = '      1      2        3    '
    c = re.compile(r'\d')#      
    ret=c.split(sting)
    print(ret)
    #  :['      ', '      ', '        ', '    ']
    #    
    print(re.split(r'\d',string))
    
  • 正則置換
  • s = 'how1are2you'
    s2 = re.sub(r'\d', '+', s)
    print(s2)
    
    #  ;how+are+you
    
    #            ,            
    def double(s): #              
        return str(int(s.group()) * 2)
    #          ,           
    s2 = re.sub(r'\d', double, s)
    print(s2) 
    
    #  :how2are4you