2016-07-11 21 views
0

Also ich versuche, ein Bash-Skript, das ich schrieb, in Python zu konvertieren, dass ich lerne, und das Python-Äquivalent der Bash Whois kann mir einfach nicht die Antwort geben, dass ich brauchen.Python extrahieren Teilstring aus String

das ist, was ich in bash-

whois 'ip address' | grep -i abuse | \ 
    grep -o [[:alnum:]]*\@[[:alnum:]]*\.[[:alpha:]]* | sort -u 

und es funktioniert perfekt haben.

wenn sie versuchen, etwas ähnliches in Python zu tun (3.5.2) -

IPWhois('ip address').lookup_whois() 

es mir ein Wörterbuch mit dem Objekt ist zu geben, dass ich in dem ersten Wert etwa auf halbem Weg durch die Zeichenfolge suchen.

Ich habe versucht, es in str(dict).splice('\n')[index] zu setzen, aber mit jeder Iteration ändert sich der Index, so kann ich es nicht in ein Skript wie das setzen. auch die bash whois kann sowohl ip-adressen als auch domain-namen ohne umwandeln ausführen. ich denke, dass ich die Umwandlung herausgefunden habe, aber das Versuchen, die Resultate von den IPWhois zu ergreifen, gibt mir einen Schmerz im Hintern.

ich könnte die Bash whois von subprocess.call nennen, würde aber gerne herausfinden, wie es in Python zu tun. ich weiß, dass ich einen Teil davon mit re.configure greifen kann, noch einmal ändert sich die Rückkehr, also re.compile müsste jedes Mal auch ändern.

versuche ich weiter, oder bleibe ich einfach bei dem Bash-Skript, das so gut funktioniert? Ich habe bereits den größten Teil des Python-Skripts geschrieben und die Dinge, die ich nachschlagen muss, helfen mir beim Lernen.

irgendwelche Ideen?

können Sie die Bash-Skript here

dank sehen, em

Antwort

0

Sie auf dem richtigen Weg waren die Regex-Modul mit der Verwendung. Ihre search könnte

re.search(r'(\w*@\w*\.\w*)', IPWhois(ip).lookup_whois()['nets'][0]['emails']).group(1) 
0

Was ich tun gelandet war

domain = socket.gethostbyname(hostname/ipaddr) #if ipaddr it stays the same 
email_addr = re.search(r'(\w*\D\w*@\w*\.\w*)', IPWhois(domain).lookup_whois()['nets'][0]['emails']).group(1) 

ich die extra \w*\D dort setzen musste, weil einige der E-Mail-Adressen in ihnen einen Bindestrich hatte. Ich betrachtete das Regex-Howto statt der vollen Bibliothek.