正規表現の使用、reモジュールおよびモジュールのREモジュールでの使用

6171 ワード


目次
 
モジュールの定義
モジュールの種類
レモジュール
三つの検索方法findll search  match
文字列処理の拡張:置換  カット
レモジュールのステップ
comple:正規表現を使って問題を解決する時間を節約します.
finditerは正規表現を使って問題を解決する時間/メモリを節約します.
モジュールにグループ化した使用
グループ名
正規表現の使い方
マッチング整数
ラベルを合わせる
爬虫類の例 
モジュールの定義
モジュールは機能の集合です.モジュールはpythonが提供してくれて、この内容を操作する方法です.この操作する内容はもともと存在します.
例:タイムモジュールはpythonで時間を操作し、pythonに時間計算時間を表示します.
モジュールの種類
  • はモジュールを内蔵しています.
  • サードパーティモジュール:自分でインストールする
  • が必要です.
  • カスタムモジュール:自分で書いたモジュール
  • レモジュール
    pythonで正規表現を使用して、先にREモジュールを導入します.
    三つの検索方法findll search  match
    findll:すべてのマッチ可能な要素にマッチします.各項目はリストの中の要素です.
    文法:findll(正規表現、一致する文字列、flags)
    例:
    import re
    ret=re.findall('\d+','shdu128wer93')
    print(ret)  
    
      :
    ['128', '93']
    search:左から右への最初の一致だけが得られたのはマッチングの結果ではなく、変数のgroup方法で結果を取得します.もし該当しない場合は、Noneに戻ります.グループを使うとエラーが発生します.
    例:
    import re
    ret=re.search('\d+','shdu128wer93')
    
    print(ret)#    ,            <_sre.sre_match object="" span="(4," match="128">
    print(ret.group())#  ret.group()          128
    もし該当しない場合は、Noneに戻ります.グループを使うとエラーが発生します.
    おすすめの書き方:
    ret=re.search('\d+','shdu128wer93')
    if ret:
        print(ret.group())  #128
    
    match:最初からマッチします.searchの正規表現に'^'を加えます.
    例:
    ret=re.match('\d+','shdu128wer93')
    #ret=re.match('^\d+','shdu128wer93')
    print(ret)  #None
    
    ret=re.match('\d+','128shduwer93')
    #print(ret)  #<_sre.sre_match object="" span="(0," match="128"/>
    文字列処理の拡張:置換  カット
    スプリット:リストに戻り、正規表現でカットすると、デフォルトでマッチした内容がカットされます.
    例:
    s='alex83taibai83egon25'
    ret=re.split('\d+',s)
    print(ret)  #['alex', 'taibai', 'egon', '']
    
    sub:(正規表現は、該当する内容を置換し、該当する文字列、置換回数)
    例:文字列の数字をHに置き換えて、置換を要求します.
    ret=re.sub('\d+','H','alex83taibai83egon25',1)
    print(ret)  #alexHtaibai83egon25
    subn:元のグループを返します.2番目の要素は置換回数です.
    ret=re.subn('\d+','H','alex83taibai83egon25')
    print(ret)  #('alexHtaibaiHegonH', 3)
    レモジュールのステップ
    comple:正規表現を使って問題を解決する時間を節約します.
    正規表現をコンパイルして、コンパイル結果でsearch、match、findell、finditerに行けば、時間を節約できます.何度も使用しているうちに、何度もコンパイルすることができません.
    例:
    ret=re.compile('\d+')  #      ,        
    print(ret)
    res=ret.findall('alex83taibai83egon25')
    print(res)
    res=ret.search('alex83taibai83egon25')
    print(res.group())
    
    #  :
    re.compile('\\d+')
    ['83', '83', '25']
    83
    finditerは正規表現を使って問題を解決する時間/メモリを節約します.
    finditer  は、すべての結果は、このサブジェネレータにあります.ループ+groupの形で値を取る必要があります.スペースを節約することができます.
    例:
    ret=re.finditer('\d+','128shduwer93')  #  :     ,       
    print(ret) #     
    for i in ret:
        print(i.group()) 
    
    
      :
    128
    93
    モジュールにグループ化した使用
    ほとんどの場合、私たちが欲しいデータはいらない間に混ぜられます.この時には、私たちが欲しい内容をグループで抽出する必要があります.
    まず、グループを理解する例を示します.
    文字列'ウォーハ'から私たちが欲しい内容を抽出することができます.
    import re
    s='ウォーハ'
    ret=re.search('(\w+)(\w+)>',s)
    print(ret.group(0))  #     ,0     
    print(ret.group(1))  #               
    print(ret.group(2))
    print(ret.group(3))
    
    
      :
    ウォーハ
    a
    wahaha
    a
    findllは、パケット内のコンテンツを取り込むこともでき、パケット内のコンテンツを優先的に表示する特殊な文法がある.
    ret=re.findall('>(\w+)
    しかし、グループ優先は必要ない場合があります.グループ優先はどうやってキャンセルしますか?
    パケットの優先度は、グループに疑問符を付けるだけです.(?:正規表現)
    例:
    ret=re.findall('\d+(\.\d+)?','1.234*2.345')
    #    ,      
    print(ret)  #['.234', '.345'] 
    #      
    ret=re.findall('\d+(?:\.\d+)?','1.234*2.345')
    print(ret)  #['1.234', '2.345']
  • は、正規表現に対して、ある一群の文字の出現回数を全体的に制約するためにグループ化する必要がある.
          (\.[w+]+)
  • python言語にとって、パケットはより正確にあなたが本当に欲しいコンテンツを見つけるのを助けることができます.
     (\w+)(\w+)>
    スプリット:了解すればいいです.
    ret=re.split('\d+','alex83taibai83egon25')  #           ['alex', 'taibai', 'egon', '']
    print(ret)
    ret=re.split('(\d+)','alex83taibai83egon25') #     ,             ['alex', '83', 'taibai', '83', 'egon', '25', '']
    print(ret)
    グループ名
    (?P正規表現)
    上に述べたように、group()のパラメータでマッチ内容を取得します.ここでは、グループ名でマッチ内容を取得することもできます.
    例:
    s='ウォーハ'
    ret=re.search('>(?P\w+)
    場合によっては、前のグループを使用してもいいです.この名前のグループを使用して、前の同名グループのコンテンツと一致する必要があります.
    s='ウォーハ'
    pattern='\w+)>(\w+)(?P=tab)>'
    ret=re.search(pattern,s)
    print(ret) #      <_sre.sre_match object="" span="(0," match="<a>wahaha</a>">
    
    反例:現在の後が一致しない場合、マッチできませんでしたに両替する.
    s='ウォーハ
    pattern='\w+"(\w+)(?P=tab)>'
    ret=re.search(pattern,s)
    print(ret) None
    正規表現の使い方
    マッチング整数
    #     ,     
    ret=re.findall(r"\d+\.\d+|\d+","1-2*(60+(-40.35/5)-(-4*4))")
    print(ret)#['1', '2', '60', '40.35', '5', '4', '4']
    #        
    ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*4))")
    print(ret)#['1', '2', '60', '', '5', '4', '4']
    ret.remove('')#    
    print(ret)#['1', '2', '60', '5', '4', '4']
    
    ラベルを合わせる
    s='ウォーハ'
    ret=re.search('>(?P\w+)
    爬虫類の例 
    正規表現で豆瓣映画を取得します.