正規表現について説明します｡
さて､ 正規表現はPythonに限ったことではありません｡
実のところ､ プログラミング言語のいたるところで目にすることができます｡
特に､ 誰かが正しい電子メールを入力したかどうかをチェックしたり､
パスワードの要件を満たしたり､ ある文字列がテキストの一部に存在するかどうかをチェックしたりするような検証を行う場合に､
非常に便利だからです｡
そこで､ このビデオでは､ この点を探ってみたいと思います｡
正規表現｡
どんなものですか？
さて､ 幸運なことに､ Pythonには正規表現モジュールが付属しています｡
正規表現はPythonに特化したものではないことを覚えておいてください｡
どの言語でも使えますが､ 文章の中から探し物をするのにとても便利です｡
つまり､ ここに文字列があるとすると､ この中で文字列検索と言うことができる｡
次にお願いします｡
これでよしとしよう｡
さて､ ここで何かを探したいとします｡
まず､ こんなことができるかな？
検索と言えばいいのでしょうか？
文字列で｡
ここに印刷しよう｡
そして､ 「実行」をクリックすると｡
私は真を受ける｡
そして､ これは文字列の中の何かを検索する簡単な方法である｡
では､ なぜ正規表現が必要なのでしょうか？
正規表現はこれよりもう少し強力です｡ なぜなら､ 文字列の中に何回searchが出現するかを調べたいからです｡
あるいは､ 複雑な文字列があるのかもしれません｡
どういうことか､ お見せしましょう｡
正規表現のようなものを使うには､ このような形式を使います｡
だから､ r e dot と言って､ この中で search を使えばいいんです｡
そして､ ここにあるように､ パターンと文字列といくつかのフラグを与えています｡
それについては､ 後ほど少しお話します｡
だから､ あとはどのパターンをやりたいかということです｡
さて､ このように言えるように､ 文字列にこれが存在するかどうかを検索したいのです｡
そして､ 実際の文字列を与えてください｡
私たちの場合
さて､ これが私たちの文字列です｡
だから､ これを実行すると
さて､ ここでどうなるかプリントアウトしてみましょう｡
では､ プリントをやってみましょう｡
実行」をクリックすると
わかりました｡
マッチオブジェクトと呼ばれるものを取得します｡
正規表現は､ 単なる真偽ではなく､ これに関するもう少し詳しい情報を教えてくれる実際のオブジェクトを出力してくれるのです｡
そして､ こちらでご覧いただけるのは､ 情報のひとつであるスパンです｡
つまり､ 文字列のどこに発生するかというと､ インデックス17で発生し､ インデックス21で終了する｡
だから､ 本当に便利なんです｡
この情報を保存して､ ここだけと言うことにしましょう｡
では､ このマッチオブジェクトを使って何ができるのでしょうか？
さて､ まずできることは､ 今あるものを確認することです｡
そこで､ まずスパンですが､ これは見ての通りです｡
そして､ これを実行すると
文字列がタプルとして出現する場所を教えてくれる｡
だから､ インデックス17からインデックス21へ｡
スタート・アンド・スタートもできる｡
テキストがいつ始まるかを教えてくれますし､ groupやendを実行することで､ テキストの終わりを表示することもできます｡
さらに､ グループ化することもできます｡ グループ化すると､ 一致した文字列の一部が返されます｡
例えば､ ここに別のものがあったとします｡
まあ､ 一致した文字列の一部分しか教えてくれないんですけどね｡
このグループは､ 複数の検索を行う場合にとても便利です｡
ですから､ 私たちの場合､ 検索は1回だけです｡
つまり､ マッチさせようとするパターンがあるわけですが､ 1つの行の中で複数の検索を行う方法があります｡
しかし､ それをお見せする前に､ このような「大文字のS」のような存在しないものをやったらどうなるか？
実行」をクリックすると
正規表現が何も見つからなければ､ 何も返さないので､ 今Aがnoneになるため､ エラーが発生します｡
つまり､ マッチオブジェクトを返すか､ 何も返さないかのどちらかです｡
さて､ これをより高度なものにするにはどうしたらいいのか｡
まあ､ 一つ言えることは､ チェックしたいパターンを作っておくということです｡
そこで､ ここのパターンとこのパターンを正規表現のドットコンパイルで表現するとします｡
そして､ コンパイルは､ ここでやったように､ パターンを与えることができるようになります｡
つまり､ ここでは単純にこれを確認したいだけだとします｡
さて､ このパターンを使えば､ 単に検索をかけるだけでなく､ 検索結果を表示することができますね｡
もう､ このパターンでいいんです｡
私の代わりに検索してくれること｡
だから､ もう一度､ これを実行すると｡
まあ､ これで渡す必要はないんですけどね｡
検索したい文字列を渡すだけでいいんだ｡
これがキャプチャされ､ どこでも何度でもパターンを使えるようになったことを確認します｡
では､ パターンドットができたとしましょう｡
私たちが持っているすべてのメソッド､ 実はかなりたくさんあるんです｡
便利なものを紹介しよう｡
私たちは､ すべてのものを見つけるfind allを持っています｡
マッチのインスタンス｡
では､ ここでbeと言いましょう｡
そして､ 「実行」をクリックします｡
あれを見てください｡
私はこれを持っています｡
そして､ これ｡
だから､ リストの中にこの両方のインスタンスを取得します｡
フルマッチとフルマッチみたいなこともできますしね｡
まあ､ すべてが完全に一致することを確認することです｡
そこで､ ここで実行をクリックすると､ 印刷しよう､ ここを見て､ 実行をクリックします｡
フルマッチにならないので､ なしにしています｡
フルマッチでマッチを返すためには
検索する文字列と全く同じである必要があります｡
そこで､ 「実行」をクリックすると｡
これでよしとする｡
マッチオブジェクトが表示されるようになりました｡
さて､ ここで「実行」をクリックすると､ 感嘆符の代わりに疑問符が表示されるとします｡
感嘆符をつけたら､ その後に何かあるかもしれないので､ なしです｡
まだ何も出てきません｡
また､ もう一つの選択肢として､ マッチングもあります｡
そしてmatchは､ ご覧の通り､ 文字列の先頭の0文字以上にマッチします｡
ここで文字列を入力して､ dxをプリントすると......実は､ これを変えてみましょう｡
ここで実際に比較する文字列をアンドレにして､ 実行をクリックしましょう｡
私はまだ完全一致を使用する私が見る場合､ 私は対の一致オブジェクトを取得します｡
というのも､ ここでは完全一致しか求めないのに対して､ 文字列にマッチしてその後に何が来ても構わないというマッチングをしたいからです｡
だから､ これは非常に便利なんです｡
でも､ これまでは､ 使えるメソッドはいくつかあって便利なんですが､ これはそれほど強力ではないような気がするんです｡
なぜすべての言語には正規表現があるのか？
なぜ､ 私たちは本当に気になるのでしょうか？
さて､ 次のビデオでは､ このパターンのアイデアを探求し､ どのように本当に高度なパターンを行うことができるかを説明します｡
次の動画でお会いしましょう｡
バイバイ｡