毎日ちょっとPython ~ 18日目 ~
タイトル通りに毎日になってきました。リスト、辞書、タプルを使いこなしたい。正規表現終わらせたい。
re.IGNORECASE , re.DOTALL , re.VERBOSEを組み合わせる
compile()実行時のオプションを全部盛りにしたい場合はどうするのか?第2引数には一つしかオプションを設定できません。
このような場合は縦線記号(|)で結合します。この文脈での | は「論理和演算子」として働きます。
>>> som_regex_value = re.compile(r'regex value',re.IGNORECASE | re.DOTALL | re.VERBOSE)
つぎから電話番号とかのプロジェクト。
電話番号と電子メールアドレスの抽出
長大なWebページや文書から、すべての電話番号と電子メールアドレスを見つけだす作業をします。
イメージとして、Ctrl - A して、Ctrl - C してプログラムに投げれば終了のものを作成します。
初めにコードを書きたくなりますが、まずはやらなければならないことを抽象的に考えましょう!(とっても大事なこと言ってる)
どんな機能が必要なのか?下記のような機能が必要ですね。
・クリップボードからテキストを取得する
・テキストから電話番号とメールアドレスを見つける
・それをクリップボードに貼り付ける
これをコードで実現する方法を考えましょう。
・pyperclipモジュールを使って、クリップボードに対して文字列のコピーと貼り付けを行う
・電話番号用途メールアドレス用の2つの正規表現を作る。
・マッチした文字列をきれいに整形して、1つの文字列にしてクリップボードに貼り付ける。
・何も見つからなかった場合には、何らかのメッセージを表示する
以上の項目がプロジェクトのロードマップになります。コードを書くときに一つずつ集中して取り組めます。
ステップ1 : 電話番号用の正規表現を作る
日本の番号ではないけどとりあえず。書いてみた
#! python3
# phoneAndEmail.py - クリップボードから電話番号とメアドを検索する
import pyperclip, re
phone_regex = re.compile(r'''(
(\d{3}|\(\d{3}\))? #市外局番
(\s|-|\.)? #区切り
(\d{3}) #3桁の番号
(\s|-|\.) #区切り
(\s*(ext|x|ext.)\s*(\d{2,5}))? #内線番号
)''',re.VERBOSE)
#TODO: 電子メールの正規表現
#TODO: クリップボードのテキストを検索する
#TODO: 検索結果をクリップボードに貼り付ける
※エディタで書いてるときになんかうまいことエラーが消えなくて何だろうって思ったら、raw文字列にしてないという事が原因だった。絶対に忘れるだろうから、r'' の形は忘れないようにしないと
一応本の中に日本に対応する方法が書いてあったのでそちらも記載する。といったところでお時間です。
最後に
明日は日本の番号での対応から書くかな。