電子メールの処理
第5部Gmailを用いた通知システムの実装についてLine Bot
今日、私は正規表現を見て、特定の内容のメールを検索するための一般的な機能を作ります.
前の記事で私はあなたに言及しました.
私は今すぐ私のユースケースに対処するために書いた一般的な機能をすぐに行くでしょう.最初に、基本的に同じことをした3つの異なった機能を書かなければならなかったので、私はこれをしました.
あまりにも多くの入力ミスを犯すのを防ぐために.正規表現を定数として格納します.
はい、
他の2つのキャプチャグループを壊しましょう. ジェネリック関数を見てみましょう.
関数コールは次のようになります.
我々はそれが複数行のテキストを取得し、そのテキストはASCIIではないという一致を伝える.
正規表現を使ってマッチを見つけたら、辞書オブジェクトを作成します.
その後、一致するオブジェクトのキー名を取得する(busname、宛先、停止).これらのキーを使用して値を取得する
しかし、試合がないチャンスがあります.だから私たちは
これはおそらく最良の解決策ではない.もちろん、辞書を作成せずにマッチオブジェクトを返すこともできます.
今日、私は正規表現を見て、特定の内容のメールを検索するための一般的な機能を作ります.
前の記事で私はあなたに言及しました.
私は今すぐ私のユースケースに対処するために書いた一般的な機能をすぐに行くでしょう.最初に、基本的に同じことをした3つの異なった機能を書かなければならなかったので、私はこれをしました.
あまりにも多くの入力ミスを犯すのを防ぐために.正規表現を定数として格納します.
# Bus
BUS_DATA = (
r"^「(?P<busname>[一-龯]\d{1,2})\s(?P<destination>[一-龯]+)行き・"
"(?P<stop>[一-龯]+)」"
)
注意事項[一-龯]
等しい[a-z]
ここで我々は間の任意の単一の文字を受け入れるa
and z
. これは完璧ではありませんが、私が日本語で関係する必要があるすべての文字をカバーします.はい、
[一-龯]\d{1,2}
. 東京のすべてのバス名は1つの完全な漢字と数字で構成されています.したがって、この正規表現は、1つの漢字が1または2桁であると一致すると言います.例:渋11
, 渋61
これは括弧で囲まれています.キャプチャグループの作成.そしてこのグループは?P<name>
; 私たちに1つの完全なキャプチャを与える(?P<busname>[一-龯]\d{1,2})
.他の2つのキャプチャグループを壊しましょう.
(?P<destination>[一-龯]+)行き
これは1つ以上の漢字をキャプチャし、バスの最終目的地です.サービスを終了します.(?P<stop>[一-龯]+)
これは再び1つ以上の漢字をキャプチャし、それが搭乗されたバス停の名前です.def findMatches(string, regex) -> dict:
match = re.search(regex, string, re.UNICODE | re.MULTILINE)
if match:
matches = dict()
for key in match.groupdict():
matches[key] = match.group(key)
return matches
# No Matches
return None
これは何ですか.私たちはメールからのテキストの文字列を取っているし、複数行のテキストの1つの文字列です.我々はまた、正規表現を取っている.関数コールは次のようになります.
matches = findMatches(body,BUS_DATA)
遺体は'02月03日 18時15分\nNAME_OF_PASMO_USER\n「渋11\u3000田園調布駅行き・昭和女子大」でタッチしました。\n\n東急セキュリティ\n'
まず、マッチオブジェクトを作成しますre.search()
.我々はそれが複数行のテキストを取得し、そのテキストはASCIIではないという一致を伝える.
正規表現を使ってマッチを見つけたら、辞書オブジェクトを作成します.
その後、一致するオブジェクトのキー名を取得する(busname、宛先、停止).これらのキーを使用して値を取得する
match.group(key)
そして、これらの値を新しい辞書オブジェクトのキーに割り当てます.我々は最終的にそのオブジェクトを返します.しかし、試合がないチャンスがあります.だから私たちは
None
その場合は、後でコードのテストを行うことができます.これはおそらく最良の解決策ではない.もちろん、辞書を作成せずにマッチオブジェクトを返すこともできます.
Reference
この問題について(電子メールの処理), 我々は、より多くの情報をここで見つけました https://dev.to/basman/processing-email-being-selective-2180テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol