桃太郎2017/5/212019/9/1Pythonで正規表現を扱う方法を知りたい正規表現で文字列を抽出する方法が知りたい正規表現を使って文字列を置換する方法が知りたい指定したパターンに一致する文字列を抽出したい場合、正規表現がよく使われます。正規表現はそもそもわかりにくかったり、使い方がなかなか身につかないなどの問題があります。使って複数の異なる抽出対象を取得する方法などの使い方に関して解説していきます。まとめ正規表現とは正規表現は、文字列の集まりを1つの形式で表すための特別な書き方になります。こちらの正規表現のサンプルを見てみましょう。^[0-9]{3}-[0-9]{4}$こちらのサンプルは、郵便番号を抽出するための正規表現になります。わかりやすく図で表したものがこちらになります。画像:正規表現の例この正規表現を使うと、0〜9までの数字3桁で始まり、ハイフン("-")の後に同じく0から9までの数字4桁で終わる文字列を抽出することができます。Pythonには正規表現(regex)を扱うためのreモジュールが用意されています。基本的にはそのreモジュールの関数の引数に、正規表現を渡すことで文字列の抽出などの操作ができるようになっています。正規表現を使って文字列を抽出する方法ここからは実際に文字列を抽出することが出来る関数やメソッドを紹介していきます。match関数match関数は、検索対象の文字列の先頭に抽出ワードが存在するか判定します。検索対象の文字列を指定します。対象が存在しない場合はNoneを返し、存在する場合はmatchオブジェクトが返ります。match='123-7777'>気をつけなければならないのは、文字列の先頭部分しか見てくれないという点です。利用されるケースとしては、検索したい文字が先頭にあることがルール上決まっている文字列を抽出する場合に有効です。次に、文字列全体を見てほしい場合は、次のsearch関数を使いましょう。search関数search関数は検索対象の文字列の先頭から最後までを検索し、抽出ワードが存在するか判定します。検索対象の文字列を指定します。対象が存在しない場合はNoneを返し、存在する場合はmatchオブジェクトが返ります。match='123-7777'>先程のmatch関数とは郵便番号と住所が逆のaddress2という変数を用意しています。先程使ったmatch関数を使用すると郵便番号が先頭にないので、結果としてNone(該当無し)という結果が返ります。search関数は先頭だけではなく文字列全体を検索したい時に有効な関数です。findall関数findall関数は検索対象の文字列の先頭から最後までを検索し、存在する正規表現の全てを取得して文字列のリストで返します。引数に抽出ワード、第二引数に検索対象の文字列を指定します。'567-9999']郵便番号が2つに増えていますが、しっかりとリストに格納されていることがわかるかと思います。findall関数は、検索したい文字が有るか無いかだけではなく、有るもの全てを取得したい場合に有効な関数です。findメソッドfindメソッドは文字列型のメソッドで、文字列を検索するときに使用します。以下の文字列から「python」を検索したい場合は以下のようになります。str.find('Python')print(fd)実行結果:5これは、検索対象の文字列の中にあるインデックス番号を示しています。findメソッドは検索対象の文字列の先頭から最後までを検索します。引数に渡した文字列が存在すれば、そのインデックスを返します。インデックスとはリストや辞書などに含まれている要素の位置のことです。検索した対象が存在しない場合は、"-1"を返します。(city)実行結果3インデックスは0から始まるため、千代田区の文字の始まり位置が"3"(0文字目から数えて3文字目)という結果が得られます。正規表現を使うことが出来ないので柔軟な検索は出来ません。文字列型で手軽に検索が出来るというのは大きな魅力ですよね。正規表現を使うほど幅広い検索パターンを意識する必要が無い場合には、findメソッドを使用してみると良いでしょう。正規表現を使ってURLを抽出するそれでは正規表現を使った実践的な使い方を見ていきましょう。今回はURLを正規表現を使って抽出してみます。コードにはHTMLが登場しますが、HTMLがわからなくても理解できます。今回使うURLの形式はこのような形で書かれています。URL形式:products/[商品カテゴリー(英小文字1文字以上)]/[商品番号(4桁の数字)]/例)https://exsample.com/products/mens/0001/このURLがHTMLファイル内に記述されていると想定します。正規表現を使って抽出するサンプルコードを見てみましょう。'https://exsample.com/products/kids/8567/']htmlという変数に、HTMLファイルが記述されていますね。ここからfindall関数を使ってhtml変数内のURLを抽出しています。商品カテゴリーを抽出する正規表現で、"+"は直前の文字(ここではaからzの英子文字)が1文字以上という指定を表しています。正規表現を使った置換ここまでは文字列の抽出方法について解説してきました。正規表現を使った文字列の抽出に並んでよく行われる操作が、文字列の置換です。文字列の置換が出来るようになると、柔軟に文章を作ることが出来るようになります。詳しい解説は、こちらの記事をご覧ください。ついて、ここで詳しくご紹介します。カギカッコ[]は、”メタ文字”と呼びます。メタ文字は他にも様々な種類があり、全てを覚えるには時間が掛かります。あなたが実際に正規表現が必要になった時に辞書がわりに使えるようにと、以下に使用頻度が高いメタ文字の一覧を掲載しておきます。この記事をブックマークなどで保存しておき、必要な時に調べられるようにしておくと良いでしょう。d,e任意の文字を簡単に表すために先ほどご説明したメタ文字以外にも、任意の数字や文字を表すための正規表現固有の特殊文字があります。それが、特殊シーケンスと呼ばれる文字です。山、川、空白など上記の表を見ていただくとお分かりになる通り、特殊シーケンスはバックスラッシュ(\)と英字です。このバックスラッシュを英字とセットにして特殊シーケンスを表記する処理をエスケープ処理と呼びます。このエスケープ処理があるおかげで、プログラムが”\d”を見た時に、”d”という英字1文字を検索したいのか、任意の数字を検索したいのか区別することができます。まとめこの記事ではPythonの正規表現の抽出についてを解説しました。match関数search関数findall関数findメソッドの特徴を踏まえて、文字列の抽出をしてみましょう。URLの抽出はとても実践的でしたが、これが理解できるとあとは正規表現の書き方を覚えるだけです。正規表現を使って抽出することを考える場面は今後も多く出てくると思います。そのようなときはぜひこの記事を思い出し、読み返してみてください!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。桃太郎20代は役者、30代はエンジニア、そして40代を迎えた現在、Webライターとして活動しながら、3人の息子たちの家庭教育、アンチエイジングなどにも力を入れて日々ノマドライフを楽しんでいます。