Python 正規表現(matchとsearchの違い,subの使い方)
matchとsearchの違い
違いを簡単に言うと,
match…先頭から探索(文章の途中にマッチするものがあってもNoneとなる)
re.match(r"Hello.*", "aaaaaaaaHello, world!") # None
search…文章の途中からでもマッチする
result = re.search(r"Hello.*", "aaaaaaaaHello, world!") result # <re.Match object; span=(8, 21), match='Hello, world!'> result.group(0) # Hello, world! # 開始位置,終了位置,範囲を取得 result.start() # 8 result.end() # 21 result.span() # (8, 21)
re.search(pattern, string, flags=0)
string を走査し、正規表現 pattern がマッチを生じさせる最初の場所を探して、対応する マッチオブジェクト を返します。文字列内にパターンにマッチする場所がなければ None を返します。これは文字列のどこかで長さ 0 のマッチを見つけるのとは異なることに注意してください。
re.match(pattern, string, flags=0)
string の先頭で 0 個以上の文字が正規表現 pattern にマッチすれば、対応する マッチオブジェクト を返します。文字列がパターンにマッチしなければ None を返します。これは長さ 0 のマッチとは異なることに注意して下さい。
subの使い方
正規表現を用いて文字列を置換できる.
msg = "test123hello" re.sub(r"[0-9]*", "", msg) # testhello
re.sub(pattern, repl, string, count=0, flags=0)
string 中に出現する最も左の重複しない pattern を置換 repl で置換することで得られる文字列を返します。 パターンが見つからない場合、 string がそのまま返されます。 repl は文字列または関数です。 repl が文字列の場合は、その中の全てのバックスラッシュエスケープが処理されます。 \n は 1 つの改行文字に変換され、 \r はキャリッジリターンに変換される、などです。 ASCII 文字のエスケープで未知のものは将来使うために予約されていて、エラーとして扱われます。 それ以外の \& のような未知のエスケープは残されます。 \6 のような後方参照は、パターンのグループ 6 がマッチした部分文字列で置換されます。