python-は正規関数reを使用する.findallは不定長で一定のフォーマットの文字列を処理します

2218 ワード

Python正規表現
  • reモジュールはPython言語にすべての正規表現機能を持たせる.
  • compile関数は、モード文字列とオプションのフラグパラメータに基づいて正規表現オブジェクトを生成します.このオブジェクトには、正規表現の一致と置換のための一連の方法があります.
  • reモジュールは、モード文字列を最初のパラメータとして使用するこれらの方法の機能と完全に一致する関数も提供する.

  • findall
    正規表現が一致するすべてのサブストリングを文字列に検索し、リストを返します.一致が見つからない場合は、空のリストを返します.
    注意:matchとsearchは1回一致し、findallはすべて一致します.
    構文の形式は次のとおりです.
    findall(string[, pos[, endpos]])

    パラメータ:
  • string:一致する文字列.
  • pos:オプションのパラメータで、文字列の開始位置を指定します.デフォルトは0です.
  • endpos:オプションのパラメータで、文字列の終了位置を指定します.デフォルトは文字列の長さです.

  • re.compile関数
    compile関数は、正規表現をコンパイルし、match()、search()、findall()などの関数で使用できる正規表現(Pattern)オブジェクトを生成するために使用されます.
    構文の形式は次のとおりです.
    re.compile(pattern[, flags])

    パラメータ:
  • pattern:文字列形式の正規表現
  • flags:オプションで、大文字と小文字を無視したり、マルチラインモードなど、マッチングモードを表します.具体的なパラメータは次のとおりです.
  • re.I大文字小文字を無視する
  • re.Lは特殊文字セットw,W,b,B,s,Sが現在の環境に依存する
  • を表す.
  • re.Mマルチラインモード
  • re.Sは.また、改行文字を含む任意の文字(.改行文字を除く)
  • .
  • re.Uは特殊文字セットw,W,b,B,d,D,s,SがUnicode文字属性データベース
  • に依存することを示す
  • re.X可読性を高めるために、スペースおよび#の後の注釈
  • を無視する

    例:
    '''
      re.findall                  :
        :   ,  ,  
    book1,test1,1001, book2,test2,1002, book3,test4,1004
    book1,test5,1005, book6,test6,1006, book7,test7,1007, book1,test8,1008
    book9,test9,1009, book10,test10,10010
    '''
    
    import re
    
    
    def analyzer_line(line):
        global pattern
        ary = pattern.findall(line)
        for i in range(len(ary)):
            print(ary[i][1], ary[i][2], ary[i][3])
    
    
    '''
             ,600    ,      
    '''
    def anlyzer_file(file):
        book_file = open(file, "r")
        while True:
            line = book_file.readline()
            if not line:
                break
            analyzer_line(line)
    
    
    def anlyzer_file2(file):
        with open(file, 'r') as f:
            for line in f:
                analyzer_line(line)
    
    
    if __name__ == '__main__':
        str = "(| )(\S+),(\S+),(-*\d+)(,|)"
        pattern = re.compile(str, re.IGNORECASE)
        book_file = "./logs/books.log"
        anlyzer_file2(book_file)
    

    参照先:
    https://www.runoob.com/python/python-reg-expressions.html