banner
朝闻道

朝闻道

做个知行合一的人
email

Python正規表現のパターン分類

インターネット上には関連する情報がたくさんありますが、どれもまとまっていません。そこで、私は分類を作成しました。自分自身が見やすいだけでなく、この記事を見る他の人も手間を省くことができます。

ヒント:正規表現のパターン引数には通常バックスラッシュが含まれていますが、エスケープ文字として認識されるのを防ぐために、r''という生の文字列を使用することが最善です(例:r'\t'\\tと等価です)。対応する特殊文字をマッチさせるために、生の文字列を使用すると、バックスラッシュを少なく書くことができ、コードの読みやすさも向上します。

正規表現の 4 つの主な機能:マッチング(真偽値)、取得、置換、分割。

単一の文字のマッチング#

  • . :任意の 1 文字を表します。例えば、パターン't.o'tooまたはtwoに一致します。
  • [...]:[] 内に列挙されたすべての文字の中から1 つをマッチさせます。
    • 1 つの [] は 1 文字を表します:[amk]は 'a'、'm'、または 'k' に一致します。[a-zA-Z0-9]はすべての英字と数字を表します。[A-Z][a-z]は最初の文字が大文字で、2 番目の文字が小文字であることを表します。
    • 内容を,で区切る必要はないことに注意してください。[0-35-9]は 0〜3 と 5〜9 を表します。
    • -を使用して範囲を指定できます。例えば、[abc][a-c]は同じ意味です。
  • [^...]:[] 内に含まれない文字の中から1 つをマッチさせます。
    • [^abc]は 'a'、'b'、'c' 以外の文字に一致します。

単一の文字のマッチング - 文字セット [] 内に書くこともできます#

  • \w:数字、英字、アンダースコアに一致します。[a-zA-Z0-9_]と等価で、Unicode 文字では漢字や全角数字にも一致します。
  • \W:数字、英字、アンダースコア以外に一致します。[^A-Za-z0-9_]と等価です。
  • \s:任意の空白文字、スペース、タブに一致します。[\t\n\r\f]と等価です。
  • \S:任意の非空白文字に一致します。[^\t\n\r\f]と等価です。
  • \d:任意の数字に一致します。[0-9]と等価です。
  • \D:任意の数字以外に一致します。[^0-9]と等価です。

複数の文字のマッチング#

  • *:直前の文字が 0 回以上繰り返されるパターンに一致します。例えば、パターンabc*ababcccに一致します。
  • +:直前の文字が 1 回以上繰り返されるパターンに一致します。例えば、パターンabc+abcabcccに一致します。
  • ?:直前の文字が 1 回または 0 回繰り返されるパターンに一致します。非貪欲。
  • {m}:直前の文字が m 回繰り返されるパターンに一致します。例えば、パターンab{2}cabbcに一致します。
  • {m,}:直前のパターンが少なくとも m 回繰り返されるパターンに一致します。
  • {,n}:直前のパターンが最大で n 回繰り返されるパターンに一致します。
  • {m,n}:直前の文字が少なくとも m 回、最大で n 回繰り返されるパターンに一致します。例えば、パターンab{1,3}cabcabbcabbbcに一致します。

特殊なマッチング#

  • | :左右のいずれかのパターンに一致します。例えば、0 から 100 の数字に一致するパターンはre.match(r'[1-9]?\d$|100',string)です。
  • ():括弧内のパターンに一致します。グループ(全体)を表すこともできます。|と組み合わせて使用することもできます。例えば、メールアドレスを認識する場合は(163|126|qq)です。
  • \b:単語の境界に一致します。
    • \bは幅ゼロで文字を占有しないため、境界線の存在です。\bの左右のいずれかには\wがあり、もう一方には\Wがある必要があります。
    • つまり、境界にある文字に一致するために使用されます。例えば、\bheは "he" に一致しますが、"where" には一致しません。
    • \bman\bは "I am a man, not a woman" の中のmanに一致しますが、womanには一致しません。しかし、man\bmanwomanに一致します。後者の "man" も境界にあるため、使用する際には注意が必要です。
  • \B:単語の境界以外に一致します。
    • \bとは逆で、次のように理解できます:\Bの左右のいずれかには\wがすべてあるか、\Wがすべてあるかです。
    • 例えば、py=\Bは "py==" の中の "py=" に一致しますが、"py=1" の中の "py=" には一致しません。
  • \n,\t,など:改行に一致します、タブに一致します、など。

位置のクラス#

  • ^:文字列の先頭に一致します。
  • $:文字列の末尾に一致します。
    • 例:re.match(r'[\w]{4,20}@163\.com$','[email protected]')
    • グループと組み合わせて使用できます。
  • \A:文字列の先頭に一致します。
  • \Z:文字列の末尾に一致します。改行が存在する場合は、改行の前までの終了文字列に一致します。
  • \z:文字列の末尾に一致します。
  • \G:最後にマッチした位置に一致します。

#

  • [Pp] ython: "Python" または "python" に一致します。
  • rub [ye]: "ruby" または "rube" に一致します。
  • [aeiou]:[] 内の任意の文字に一致します。
  • [0-9]:任意の数字に一致します。[0123456789] と同様です。
  • [a-z]:任意の小文字に一致します。
  • [A-Z]:任意の大文字に一致します。
  • [a-zA-Z0-9]:任意の英字と数字に一致します。
  • [^aeiou]:aeiou 以外のすべての文字に一致します。
  • [^0-9]:数字以外のすべての文字に一致します。

*:アスタリスク。直前の文字が 0 回以上繰り返されるパターンに一致します。例えば、'pytho\*n'は pythn、pythoon、pythooooon などに一致します。?、+、または {m,n} など、他の繰り返し文字にも一致するものがあります。{n,m} は柔軟に使用でき、n 回から m 回までの繰り返しを表します。

\b の使用法も柔軟で、与えられた文字列内で小文字で始まる単語を見つけます。

ss = "i Am a gOod boy  baby!!"
result=re.findall(r'\b[a-z][a-zA-Z]*\b',ss)
print(result)
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。