2016-04-02 12 views
1

私はこのコードを持っていて、最終的にはre.findall()のIPアドレスを文字列に変換したいと考えています。しかし、私はいつもエラーが出ます(下記参照)。re.findall()のIPアドレス配列を文字列に変換する方法

url = 'http://checkip.dyndns.org' 
request = urllib.urlopen(url).read() 
ip = str(re.findall(r'[0-9]+(?:\.[0-9]+){3}', request)) 
print ip 

私はいつも

TypeError: not all arguments converted during string formatting 

は、誰かがそれを変換するための最良の方法は何であるかを教えてもらえます。このエラーが出ますか? ありがとうございます。

+0

は、構造化された結果を返し、適切なAPIではなく、任意のテキストを使用し、それを心配しないのですか?例えば。 https://api.ipify.org/?format=json –

+0

'print ip'はうまく動作します(リストを文字列に変換したので' ['abcd'] 'を出力しますが、これは期待される出力です)。 [最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を提供していますか? –

+0

'' ip = re.findall(r '[0-9] +(?:\。[0-9] +){3}'、リクエスト)[0] ''は動作しますか? 。 '' re.findall() ''はすでに複数の要素がある場合に文字列のリストを返すので、 ''文字列(blah blah) ''が失敗するでしょう、私は – minhhn2910

答えて

1

re.findall()を文字列に変換していますが、その関数はコメントに記載されているようにリストを返します。個人的に

ips = re.findall(r'[0-9]+(?:\.[0-9]+){3}', request) 
for ip in ips: 
    print str(ip) 

、私は最高のすべてのものを印刷することだと思う、あるいは少なくとも:だからあなたのための最高のは、あなたが唯一の結果/ 1のIPを期待していない場合は場合は、すべての結果を印刷re.findall(...)[0]を使用することですre.findall()の長さを確認してください。これは簡単にこの方法で逃すことができるからです。また、私はthis regexのデバッグのためのサイトをお勧めしたいと思います。 :)

enter image description here

+1

感謝Keyweeusrに感謝します。 – Feng

関連する問題