FreeFun
Anmeldungsdatum: 11. August 2016
Beiträge: 58
|
Ich hoffe es kennt sich jemand mit Regularen Ausdrücken aus und weiß wie ich mein Problem lösen kann. In einer meiner Python Skripts habe ich die Funktion das man einen Button oder Link je nach dem Klickt und man kann dann je nach dem was man angegeben hat aufrufen also Http(s), ipv4, ipv6 und mit Port Angabe.
Jetzt habe ich versucht das etwas anzupassen so das auch TS3 Links funktionieren. Aber mein Wissen über Python oder Regularen Ausdrücken ist etwas mager. Funktionieren tut alles wunderbar aber für TS3 hab ich noch keine Lösung. Hier mal der Ausschnitt um dem es sich handel!
| regex = re.compile(
r'(?:http|ftp|ts3server)s?://' # http:// or https://
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # domain...
r'localhost|' # localhost...
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|' # ...or ipv4
r'\[?[A-F0-9]*:[A-F0-9:]+\]?)' # ...or ipv6
r'(?::\d+)?' # optional port
r'(?:/?|[/?]\S+)', re.IGNORECASE)
|
Der Aufbau eines TS3 links sieht folgendermaßen aus:
ts3server://SUB.DOMAIN.TLD?port=9987&nickname=NICKNAME&password=PASSWORT&channel=CHANNELNAME&channelpassword=CHANNELPASSWORT&token=TOKENKEY
ts3server://IPADRESSE?port=9987&nickname=NICKNAME&password=PASSWORT&channel=CHANNELNAME&channelpassword=CHANNELPASSWORT&token=TOKENKEY
Alles was Markiert ist kann natürlich alles sein vor allem bei Nickname und Channelname, dort sind auch gerne Leerzeichen und Sonderzeichen enthalten. Das Passwort des Servers und des Channels kann halt alles einbehalten was ein Standard Passwort Generator heutzutage ausspucken kann. Der Token zum Schluss sieht im Normal Fall so aus: Z0soV%2BiQ8WEp7ozGl%2B3OKsRjRFX2O9ppmG94S7hR
|
senden9
Anmeldungsdatum: 8. Februar 2010
Beiträge: 965
Wohnort: Österreich
|
Hi, Was soll der reguläre Ausdruck machen? Was ist das gewünschte Ergebnis (Beispiel wäre nett). Was passiert aktuell? FreeFun schrieb: Alles was Markiert ist kann natürlich alles sein vor allem bei Nickname und Channelname, dort sind auch gerne Leerzeichen und Sonderzeichen enthalten. Das Passwort des Servers und des Channels kann halt alles einbehalten was ein Standard Passwort Generator heutzutage ausspucken kann.
Sicher das Zeichen mit spezifische Bedeutungen im Dokumentpfad nicht in Prozentdarstellung dargestellt werden?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Wenn ich das richtig verstehe, willst du eigentlich nur die Felder extrahieren - ich würde mir da nicht unbedingt reguläre Ausdrücke in dem Maß antun - schau dir mal urlparse für Python 2 bzw. urllib.parse für Python 3 an - damit kann man so eine URL leichter zerlegen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #!/usr/bin/env python3
from urllib import urlparse
url = "ts3server://SUB.DOMAIN.TLD?port=9987&nickname=NICKNAME&password=PASSWORT&channel=CHANNELNAME&channelpassword=CHANNELPASSWORT&token=TOKENKEY"
parsed_url = parse.urlparse(url)
query_dict = parse.parse_qs(parsed_url.query, keep_blank_values=True)
print(
"\n".join(
[parsed_url.netloc,
query_dict['port'][0],
query_dict['nickname'][0],
query_dict['passwort'][0],
query_dict['channel'][0],
query_dict['channelpassword'][0],
query_dict['token'][0]
])
|
|
FreeFun
(Themenstarter)
Anmeldungsdatum: 11. August 2016
Beiträge: 58
|
senden9 schrieb: Sicher das Zeichen mit spezifische Bedeutungen im Dokumentpfad nicht in Prozentdarstellung dargestellt werden?
Doch das werden Sie da hast du recht. Also ein Leerzeichen wäre ja dann %20! seahawk1986 schrieb: Wenn ich das richtig verstehe, willst du eigentlich nur die Felder extrahieren - ich würde mir da nicht unbedingt reguläre Ausdrücke in dem Maß antun - schau dir mal urlparse für Python 2 bzw. urllib.parse für Python 3 an - damit kann man so eine URL leichter zerlegen:
Nein will ich nicht! Am ende wird das so eingebaut das man einen Button klickt und die URL/IP im Browser auf geht und bei FTP halt das was im System mit dem ftp Protokoll verknüpft ist! Also http:// geht Standard mäßig im Browser auf sowie ftp:// wenn das nicht anders geregelt ist! Es fehlt halt an sich nur das für TS3! Und es muss so bleiben wie es ist, in Regularen Ausdrücken weil ich von Python keine große Ahnung habe um das Ganze Skript wieder umzuschreiben.
Ich definieren ja später im Skript wo anders wie viele Buttons es gibt und was die können sollen. Der eine Macht einfach eine Webseite auf (Support), der andere den TS3 Link um auf den TS3 zu Joinen.
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7657
|
Die Regexp matcht doch? (auch für ts3servers:// das gibts wahrscheinlich nicht) Die Frage ist eher was da sonst noch mit gemacht wird.
|
FreeFun
(Themenstarter)
Anmeldungsdatum: 11. August 2016
Beiträge: 58
|
Äh Was? Ich gebe anderweitig in einer XML an was passiert wenn man die Buttons drückt! (also Button1 heißt so und die URL heißt so) Webseiten gehen auf aber der TS3 Link nicht! Ich verstehe nicht viel von Python aber die Regularen Audrücken sorgen dafür das es erkannt wird so denke ich um es href zu übergeben zu interpretieren oder was weiß ich!
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
FreeFun schrieb: Äh Was?
Wenn man mit dem regulären Ausdruck eine Teamspeak-URL mit dem Schema der genannten Beispiele (z.B. mit re.fullmatch) eine URL matchen lässt, dann findet er etwas. Also liegt es vermutlich nicht am regulären Ausdruck, sondern im weiteren Code oder am Browser, weil der möglicherweise nichts mit dem Link anfangen kann. Ich gebe anderweitig in einer XML an was passiert wenn man die Buttons drückt! (also Button1 heißt so und die URL heißt so) Webseiten gehen auf aber der TS3 Link nicht! Ich verstehe nicht viel von Python aber die Regularen Audrücken sorgen dafür das es erkannt wird so denke ich um es href zu übergeben zu interpretieren oder was weiß ich!
Was steht denn dann als URL im href auf der Seite? Weiß dein Browser, wie er mit ts3server:// URLs umgehen soll?
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29041
Wohnort: WW
|
Hallo @FreeFun: deine Beschreibung ist echt wirr... Besonders der (für mich nicht erkennbare) Zusammenhang zwischen dem Button und dem Zerlegen der URL. Was passiert zu erst? Wo kommt die URL, die Regex zerlegen soll, her? Welche Teilstücken benötigst du am Ende? Gruß, noisefloor
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Ein (?:...) matcht nur, liefert laut Dokumentation zu re aber keinen String als Treffer zurück - das ist vermutlich nur eine komplexe Methode, um zu prüfen, ob es sich um eine URL handelt - vermutlich stammt das von hier (oder direkt von django): http://stackoverflow.com/a/7160778 - was aber eigentlich unvollständig ist - da müsste man schon schwerere Geschütze auffahren: http://stackoverflow.com/a/835527 😈
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7657
|
Ich kenne deinen restlichen Code nicht, würde einfach mal vorschlagen du baust dir da so viele Debugmeldungen wie möglich/nötig ein. Ohne Debugmeldungen kann man nur raten was eigentlich passiert. Mit Debugmeldungen sollte klar sein, ob die Eingabe wirklich so aussieht wie du es erwartest ob die Regexp matcht bzw. das tut was sie soll alles andere was im weiteren Verlauf passiert
In deinem Code stellst du nur eine regex zur späteren Verwendung zusammen, die Debugausgaben (Eingabe - Ergebnis) müssen dorthin wo die regex dann tatsächlich angewendet wird... Wie das mit Debugmeldungen genau geht hängt auch vom Kontext ab in dem das ausgeführt wird. Je nachdem kann man es ins Terminal, in die generierte HTML-Ausgabe oder zur Not in eine Datei loggen lassen. Ohne Debugmeldungen ist man als Programmierer blind, vom Code anschauen und raten kommt man meist nicht weit.
|
senden9
Anmeldungsdatum: 8. Februar 2010
Beiträge: 965
Wohnort: Österreich
|
Ich glaube wenn du die gesamte Datei her zeigst könnten wir uns eventuell etwas Kontext holen. Ich werde aus deiner Beschreibung auch nicht schlau.
|
FreeFun
(Themenstarter)
Anmeldungsdatum: 11. August 2016
Beiträge: 58
|
Ich habe einfach nur versucht das wenn man den Button Klickt das nicht nur http als URL unterstützt wird sondern auch ts3server mehr nicht. Original sah es so aus:
| regex = re.compile('^https?://(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\\.)+[A-Z]{2,6}\\.?|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?::\\d+)?(?:/?|[/?]\\S+)$', re.IGNORECASE)
|
Hat auch gemacht was es soll aber für mich war einfach wichtig das der link oder das Protokoll von ts3server unterstützt wird. Ich habe leider keine Große Ahnung von Pyhton und bin davon ausgegangen das es an diesen Regularen Ausdrücken liegt was geht und was nicht!? Das Komplette Skript mag ich nicht Posten tut mir leid. Aber ich versuche was ich kann um euch zu helfen zu verstehen was ich meine. ☺ Geändert habe ich es nur weill ich dachte so wird etwas mehr unterstützt wie ftp da ich das hier fand!
|
senden9
Anmeldungsdatum: 8. Februar 2010
Beiträge: 965
Wohnort: Österreich
|
FreeFun schrieb: […] Das Komplette Skript mag ich nicht Posten tut mir leid. Aber ich versuche was ich kann um euch zu helfen zu verstehen was ich meine. ☺ […]
Dann gebe ich an dieser Stelle auf da ich das Problem nicht eindeutig identifizieren kann. Hoffentlich findest du unter den Anderen noch jemanden der dir weiterhelfen kann.
|
FreeFun
(Themenstarter)
Anmeldungsdatum: 11. August 2016
Beiträge: 58
|
Was braucht ihr den für mehr Informationen? Ich lass mir auch gerne über die Schultern schauen oder das Skript Privat an euch per PN Schicken aber Komplett hier Posten mach ich nicht, auch wenn das Skript Offen ist für alle sind mir die Such Bots wie Google einfach zu Neugierig und sollen sowas nicht finden. Einfach nur um das Angestrebte Thema hier mit dem eigentlichen Projekt nicht zu verwischen/Verbindung zu bringen bei der Google Auflistungen. Über Google findet man ja hier im Forum ja schon allerhand Beiträge. Etwas Anonymität wäre halt noch schön auch wenn das heutzutage eh kaum noch der Fall ist. ❗ Wie gesagt ich biete an das Skript per PN zu schicken auch worum es an sich geht, Per Teamviewer oder TS3 wäre dies auch möglich. 👍
|
FreeFun
(Themenstarter)
Anmeldungsdatum: 11. August 2016
Beiträge: 58
|
Schade das jetzt keiner mehr von euch weiter Interesse hat mir zu helfen, ich verstehe das es auf jedenfall besser machen würde wenn der Code gepastet wird was ich aber ungern tut würde. senden9
seahawk1986
noisefloor Wenn ich euch per PN das Skript zusende wärt ihr dann noch willens mir weiter zu helfen? 😳 Bitte..
|