2017-03-07 5 views
-2

http://www.test.comのようなURLを正規表現の中に入れて、電子メールの内容であるbodyを取得しました。Python - Regexが<>内のものを無視する

しかし、この形式でのURLがあることができます:<http://www.test.com>私はあなたが正規表現でこれを行う上で主張する場合、これらのシンボル内<>

url = re.search('http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', body) 
+0

正規表現を使用しないほうが簡単かもしれません。 – khelwood

+0

あなたの選択肢は何ですか?文字列を正規表現に渡す前に<>内のすべてを取り除くことを考えていたのでしょうか? – dperrie

+0

これは非常に簡単な変更で行うことができます。 "regex lookarounds"を検索してください。または、正規表現のチュートリアルを一般的に行うだけです。あなたの正規表現は複雑で重複しており、気づいていないバグがほとんどあります(ヒント: '$ -_ @。&+]') –

答えて

2

を何かを無視するには、次の正規表現を編集しようとしています、このnegative lookbehindを使用して達成することができます。

(?<!<) 

このように、完全な正規表現は次のようになります。

(?<!<)http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+ 
+0

ああ私は今すぐlookaroundチュートリアルを読んでいます!完璧に動作します! – dperrie

関連する問題