2012-03-25 11 views
1

HTMLファイルからの電子メールのセットに一致する以下の正規表現を書いています。電子メールは、このような私は、一般的なプログラミング言語でそれらを実装する前に、私の正規表現をテストするためにRegexPalを使用プログラムでのRegEx異常動作

alice @ so.edu 
alice at sm.so.edu 
alice @ sm.com 
<a href="mailto:alice at bob dot com"> 

として様々な形式を取ることができます。最後に投稿された電子メールの例で奇妙な動作が観察されます。 RegexPalは私の正規表現のマッチを示していますが、Pythonプログラムで同じ正規表現を使用している間はヒットしません。理由は何でしょうか?

mail_regex = (?:[a-zA-Z]+[\w+\.]+[a-zA-Z]+)\s*(?:@|\bat\b)\s*(?:(?:(?:(?:[a-zA-Z]+)\s* 
(?:\.|dot|dom)\s*(?:[a-zA-Z]+)\s*(?:\.|dot|dom)\s*)(?:edu|com))|(?:(?:[a-zA-Z]+\s*(?:\.|dot|dom)\s*(?:edu|com)))) 

RegExは、さまざまな他の例(データセットにある電子メールパターン)に対応するのに少し複雑です。 http://pythonregex.com/それはここで、特定の問題のように見えます

答えて

2

はあなたということです - ただ、同じ正規表現は、上で動作視点を与えるためにhttp://codepad.org/W2p6waBb

編集

- あなたはまた、実行してCodePad上のPythonプログラムを検査することができます生の文字列を使用する必要があります。

mail_re = r"(?:[a-zA-Z]+[\w+\.]+[a-zA-Z]+)\s*(?:@|\bat\b)\s*(?:(?:(?:(?:[a-zA-Z]+)\s*(?:\.|dot|dom)\s*(?:[a-zA-Z]+)\s*(?:\.|dot|dom)\s*)(?:edu|com))|(?:(?:[a-zA-Z]+\s*(?:\.|dot|dom)\s*(?:edu|com))))" 

そうでない場合は、インスタンス\bのためにバックスペースの代わりに単語境界のものであろう。

また、JavaScriptテスターを使用しています。 Pythonは構文と動作が異なります。驚きを避けるためには、Python固有の構文でテストする方がよいでしょう。

+0

私が聞くことができるなら、それは何でしょうか?パターンがPythonで一致しないことを確認できます。私が書いているRegEx言語が異なるのでなければ、少し驚くべきことがわかります。 – Dexter

+0

ありがとう!私はそれを逃したとは信じられません。 10時間の私のハードワークの排水をダウン。これを決して忘れないだろう。 : – Dexter

+0

"Python特有の"構文の意味について詳しく説明できますか?プレフィックスr(生の文字列)を除いて、私が言及した正規表現のすべてが良いと思いました – Dexter

関連する問題