0

Python のリソース モジュールを使用してテキストを取得する Web ページがあります。ドキュメントから 126.23.73.34 のような数字のパターンを取得し、 re モジュールを使用して抽出する方法はありますか?

4

3 に答える 3

3

IPに正規表現を使用できますd{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

text = "126.23.73.34";
match = re.search(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', text)
if match:
   print "match.group(1) : ", match.group(0)

IPv4 アドレスを取得するための完全な正規表現を探している場合は、ここで最も適切な正規表現を見つけることができます。

IP アドレスの 4 つの数字すべてを 0 ~ 255 に制限するには、上記のソースから取得した次の数字を使用できます。

(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
于 2013-05-03T10:50:06.150 に答える
1

html テキストの場合。HTMLパーサー( などBeautifulSoup)を使用して解析し、正規表現を使用してIPのように見える文字列を選択し、socketモジュールを使用してIPを検証できます。

import re
import socket
from bs4 import BeautifulSoup # pip install beautifulsoup4

def isvalid(addr):
    try:
        socket.inet_aton(addr)
    except socket.error:
        return False
    else:
        return True

soup = BeautifulSoup(webpage)
ipre = re.compile(r"\b\d+(?:\.\d+){3}\b") # matches some ips and more
ip_addresses = [ip for ips in map(ipre.findall, soup(text=ipre))
                for ip in ips if isvalid(ip)]

注: テキストからのみ IP を抽出します。たとえば、html 属性の IP は無視します。

于 2013-05-03T11:14:36.737 に答える
0

これを使用できます。有効なIP アドレスのみを受け入れます。

import re
pattern = "\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b"
text = "192.168.0.1 my other IP is 192.168.0.254 but this one isn't a real ip 555.555.555.555"
m = re.findall(pattern, text)
for i in m :
    print(i)

出力:

C:\wamp\www>Example.py
192.168.0.1
192.168.0.254

-- テスト済みで動作中

于 2013-05-03T10:58:48.853 に答える