human
Pythonプログラミング言語の正規表現について知りたい
gpt
Pythonには、「Re」と呼ばれるパッケージが組み込まれています。これは、正規表現で動作するために使用できます。正規表現（正規表現または正規表現パターンと呼ばれる）は、基本的にPythonに組み込まれ、REを通じて利用可能な小さく、高度に専門化されたプログラミング言語です。

REUSモジュールは、ラインでテンプレートを探すことができるいくつかの方法を提供します。最も一般的に使用される方法のいくつか：

* `match（）`：行の開始に対応するかどうかを判断します。
* `search（）`：このreが対応する場所を探して、行をスキャンします。
* `findall（）`：reに対応するすべての設定を見つけて、リストとして返します。
* `split（）`：ラインをテンプレートreのエントリに分割します。
* `sub（）`：REに対応するすべての設定を見つけ、別の行に置き換えます。
`compile（）`メソッドを使用して、正規表現テンプレートを正規表現オブジェクトにコンパイルすることもできます。これにより、同じ正規表現のオブジェクトを数回使用できます。

何か他のものを手伝ってもらえますか？
human
このパッケージの助けを借りて、e -mailに似ていないすべての単語を上回る関数を書きます（「word@lovo。slovo」という形式に従って）。
gpt
そうです！ライブラリ（パッケージ）「Re」を使用してPythonの関数の例を示します。

`` python
Reをインポートします

def is_email（word）：
    パターン= r "[^@]+@[^@]+\。[^@]+"
    return bool（re.match（pattern、word））

words = ["embles@gmail.com"、 "embles.com"、 "embles@com"、 "emple@google.co.uk"]]
emails = list（filter（is_email、words））
印刷（電子メール）
`` `

この例では、「is_emal」関数は正規式を使用して、単語がe-メール形式に対応するかどうかを確認します。次に、「フィルター」関数を使用して単語のリストをフィルタリングし、電子メールアドレスのみを残します。この例では、変数「単語」の単語のリストを伝えますが、この変数を確認する他の単語のリストに変更できます。

これが役立つことを願っています！
human
私の疑いが忍び込んだこと...あなたはテンプレート「[^@]」を3回使用していますが、これは犬以外に絶対にあらゆるシンボルです。たとえば、あなたの実装はそのような素晴らしい「電子メール」： `'？@。！'`を見逃しています。もっと信頼できることをしてください。しかし、全体として、デザインはフィルター（is_email、words）です「私はそれが好きです：それは審美的に審美的に楽しいように見えます。♥
gpt
確かに、ごめんなさい...

この表現を試す価値があります：

`（[a-za-z0-9]+[。-_]）*[a-za-z0-9]+@[a-za-z0-9-]+（\。[a-z | a-z] { 2、}）+`

または、本当にすべての可能なオプションをカバーする必要がある場合**：

`（？：A-Z0-9！ /=？^_ `{|}} 〜-]+）*|"（？：[\ x01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x21 \ x5b \ x5d- \ x7f] | \ \ \ \ \ \ \ \ \ \ [\ x01- \ x09 \ x0b \ x0c \ x0e- \ x7f]）*"）@（？：（z0-9]）？\。）+[a-z0-9]（5 [0-5] | [0-4] [0-9]）| 1 [0-9] [0-9] | [1-9]？[0-9]）\。）{3}（？:( 2（2（ 5 [0-5] | [0-4] [0-9]）| 1 [0-9] [0-9] | [1-9]？[0-9]）| [A-Z0-9 - ]*[a-z0-9]：（？：[\ x01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x21- \ x5a \ x53- \ x7f] | \\ [[\ x01- \ x09 x09 \ x0b \ x0c \ x0e- \ x7f]+）+）\] `` ``

最後の正規表現は、標準[RFC5322]（https://www.ietf.org/rfc/rfc5322.txt）に準拠しています。

これが最終オプションです：

`` python
Reをインポートします

def is_email（word）：
    pattern = r "" "（？：[a-z0！＃$％＆ '*+/=？^_` {|} 〜-]+（？：\。[a-z0！＃$％＆'*） +/=？^_ `{|} 〜-]+）*|"（？：[\ x01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x21- \ x5b \ x5d- \ x7f] | \\ [\ x01- \ x09 \ x0b \ x0c \ x0e- \ x7f]）*"）@（？：（？：[a-z0-9]（？：[a-z0-9-9-]*[a -z0-9]）？\。）+[a-z0-9]（？：[a-z0-9-]*[a-z0-9]）？| \ [？:( 2 [0] -5] | [0-4] [0-9]）| 1 [0-9] [0-9] | [1-9]？[0-9] \）\。）{3} （？:( 2（5 [0-5] | [0-4] [0-9]）| 1 [0-9] [0-9] | [1-9]？[0 -9]）| [a-z0-9-]*[a-z0-9] ：（] | \\ [\ x01- \ x09 \ x0b \ x0c \ x0e- \ x7f]）+）\]） "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "

    return bool（re.match（pattern、word））

words = ["embles@gmail.com"、 "embles.com"、 "embles@com"、 "emple@google.co.uk"]]
emails = list（filter（is_email、words））
印刷（電子メール）
`` `