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*'ab''abccc' に一致します。
  • +:直前の文字が 1 回以上繰り返されるパターンに一致します。例えば、パターン abc+'abc''abccc' に一致します。
  • ?:直前の文字が 1 回または 0 回繰り返されるパターンに一致します。非貪欲。
  • {m}:直前の文字が m 回繰り返されるパターンに一致します。例えば、パターン ab{2}c'abbc' に一致します。
  • {m,}:直前のパターンが少なくとも m 回繰り返されるパターンに一致します。
  • {,n}:直前のパターンが最大で n 回繰り返されるパターンに一致します。
  • {m,n}:直前の文字が少なくとも m 回、最大で n 回繰り返されるパターンに一致します。例えば、パターン ab{1,3}c'abc''abbc''abbbc' に一致します。

特殊なマッチング#

  • | :左右のいずれかのパターンに一致します。例えば、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 の両方に一致しますので注意が必要です。
  • \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)
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。