【2017-08-22】文字列及びテキストの処理(一)

2438 ワード

文字列の分割と一致
  • 文字列分割指定された分割子に基づいて1つの文字列をstr.split()を単純な分割子処理にのみ使用する方法、単一の分割子のみを指定することができ、かつ分割子の周囲のスペースなどはre.split()を処理することができず、複数の分割子を指定することができ、正規表現によって決定され、使用が柔軟である.ここで、正規表現は、キャプチャパケットと非キャプチャパケットの違いに注意し、一般に、結果リストに分割子を保存する必要がある場合は、キャプチャパケット
  • を用いる.
    #  
    import re 
    newlines="we are;hello,hi "
    
    newlines.split(" ")
    re.split(r" |;|,",newlines) #  :['we', 'are', 'hello', 'hi', '']
    re.split(r"[\s;,]\s*",newlines)  #  :['we', 'are', 'hello', 'hi', '']
    
    re.split(r"(\s|;|,)\s*",newlines)#    ,  :['we', ' ', 'are', ';', 'hello', ',', 'hi', ' ', '']
    re.split(r"(?:\s|;|,)\s*",newlines)#     ,  (?:....) ,  :['we', 'are', 'hello', 'hi', '']
    
  • 文字列の先頭または末尾が文字列の先頭または末尾文字列のstartswith()またはendswith()にどのように一致するか、操作は文字列またはメタグループを受け入れ、メタグループはマッチングを表す可能性が多く、listまたはsetなどのタイプであれば、強制的にメタグループに変換する必要があります.正規表現Match()
  • を覚えておいてください.
    #  
    lines=['abc.txt","abc.py","a.c","123.py"]
    for i in lines: 
        i.endswith(".py")#  :False True False True
        
    for i in lines: 
        i.endswith((".py",".c"))#  False True True True
    
  • shellワイルドカードマッチング文字列shellワイルドカード単純マッチング文字列fnmatchモジュールのfnmatch()またはfnmatchcase()を使用してshellワイルドカードマッチング文字列を使用する方法shellワイルドカード単純マッチング文字列を使用する方法自分で書いたパターンに基づいてマッチングし、オペレーティングシステムに関係なくshellワイルドカードは正規表現とは異なり、shell特殊世代サブ文字と理解され、文字列に一定のあいまいなマッチングを行う.一般的なワイルドカードは主に*、[]、{}、?
  • *マッチング0または複数の文字a*b aとbの間に任意の長さの任意の文字があってもよいし、aabcb、axyzb、a 012 b、abなどの1つもなくてもよい.
  • ?任意の文字a?b aとbの間に一致する文字は、aab、abb、acb、a 0 bなどの任意の文字であってもよい.
  • [list]一致listの任意の単一文字a[xyz]b aとbの間にも1文字しか存在しない必要がありますが、axb、ayb、azbなどのxまたはyまたはzのみです.
  • [!list]マッチングlistの任意の単一文字a[!0-9]b aとbの間にも1文字しか存在しない必要がありますが、axb、aab、a-bなどのアラビア数字ではありません.
  • [c 1-c 2]c 1-c 2の任意の単一文字、例えば、[0-9][a-z]a[0-9]b 0と9の間には、a 0 b、a 1 b...a 9 bのような1文字しか存在しない必要がある.
  • {string 1,string 2,...}マッチングsring 1またはstring 2(またはそれ以上)その1つの文字列a{abc,xyz,123}b aとbの間にはabcまたはxyzまたは123の3つの文字列の1つしかありません.

  • #   
    from fnmatch import fnmatch,fnmatchcase
    
    lines=['abc.txt","abc.py","a.c","123.py"]
    for i in lines:
        fnmatchcase(i,"*.txt")#  True False False False