2017-08-20 3 views
-2

私が達成しようとしているのは、ユーザーがgoogle.comgoo.glのいずれかのWebサイトのみを入力できるようにすることです。 urlgoo.glを含む基準を満たしていますので、返された結果falseが正しいpythonでstr.find()関数を使用する方法

Testing find() function in console

:これを行うには、Pythonのコンソールでの私のサンプルコードは、このようなものです。私はhttps://google.gl/LoZXyEのようないくつかのオプションのURLでテストを続けましたが、find()関数はtrueという単語を返すので、 'google.com'や 'goo.gl'という単語が含まれていません。

私の問題は、私は、変数URLにそれがすべてで単語「goo.gl」を含んでいない、まだそれはfalseを返すので、私はそれが上記find()関数からtrueを返すことが期待されるような、それ以下の値を割り当てる場合ということです。

Test Find function in console

間違った出来事は何ですか?上記のケースのようなURLを期待どおりに検証するにはどうすればよいですか?

ありがとうございました。

+3

ドンしてください(あなたのインタラクティブなラインのようなより)として、if行または式の中でそれを置きますテキストのスクリーンショットを投稿するそれらは判読不能で、見つけられず、コピー/ペーストすることはできません。 –

+0

@DanielRoseman、私は実際のテキストを投稿しようとしましたが、ウェブサイトは短いURLを投稿できないので、代わりに画面を印刷することにしました。 –

+2

あなたの2番目のurl **は '' goo.gl ''という文字列を含んでいます。 –

答えて

3

をお試しくださいトップレベルドメイン

一方向は、goo.glではなく、//goo.gl/を検索することです。これはあなたが与えた例で動作し、トップレベルのドメインを変更する前後の文字の両方を防ぐことができます。これにより、行が作成されます

url.find('//google.com/') == -1 and url.find('//goo.gl/') == -1 

上記の行は、対話型コンソールでのみ機能することに注意してください。プログラムの中でそれを使用するには、このような

if url.find('//google.com/') == -1 and url.find('//goo.gl/') == -1: 

または

expr = url.find('//google.com/') == -1 and url.find('//goo.gl/') == -1 

や「

print(url.find('//google.com/') == -1 and url.find('//goo.gl/') == -1) 
+0

この種の処理には[urlparse](https://docs.python.org/2/library/urlparse.html#urlparse.urlparse)を使用し、ドメインコンポーネント(netloc 'プロパティ)。 – ekhumoro

+0

@RoryDaulton、お寄せいただきありがとうございます。ありがとうございました。はい、私は実際のコードで 'if、else'を使用していますが、Flask-Validator組み込みの' [validator.url()] 'を使ってURLを検証してURLの検証に役立ちます。ユーザーはgoogle.comとgoog.glからのURLのみを入力します。そして、あなたの答えは本当に助けになりました、大変ありがとうございます:) –

+0

@ekhumoro、代替のための非常に感謝、私は見てみましょう。 :) –

0

url = 'https://goo.glAB/LoZXyE' 

は確かに「goo.gl」を含んでいないが、それはすぐに変更したURLにABが続いているので、あなたはそれをしたくない行

url.find('google.com/') == -1 and url.find('goo.gl/') == -1: 
    ... 
+3

これは有効なpythonコードではありません: 'SyntaxError'を送出します。 – ekhumoro

+0

うん!編集されました。ありがとう@ekhumoro – gipsy

関連する問題