Ich schrieb eine Python-Regex, um URLs zu entsprechen. Ich habe ein ziemlich komplexes geschrieben, das ziemlich gut funktioniert. Ich habe versucht, den Etikettenteil im Hostnamen zu erhalten, um genauer zu sein, basierend auf dem, was ich auf Wikipedia gelesen habe.Kann nicht diese 'URL-Label' Regex, um genau zu sein
Grundsätzlich, wenn Sie mein Code-Snippet sehen, habe ich eine Wahrheitstabelle, um den Etikettenteil zu testen, den ich geschrieben habe. Wenn du die Wahrheitstabelle verstehen willst, basiert sie auf 'Einschränkungen für Hostnamen' in der Wiki-Seite des Hostnamens.
Ich kann Fall 1 (Zeichenfolgen [0]) einfach nicht erreichen, ohne andere Fälle zu brechen und kann nicht herausfinden, warum Fall 1 nicht funktionieren würde. Ich habe Debugging-Tools verwendet, aber die betreffende Fehler-Zeichenfolge ist zu klein, um wichtige Informationen zu erhalten.
Bitte helfen Sie mir und geben Sie mir eine Antwort auf die, die ich geschrieben habe, damit ich weiß, was ich vermisse.
Wenn Sie sich fragen, warum ich nicht eine Drittanbieter-Bibliothek verwenden, um URLs zu entsprechen, lerne ich reguläre Ausdrücke.
import re
F = False
T = True
results = [T,F,T,F,F,F,T,F,T,F,F,F,F,F]
strings = ['a','-','aa','--','-a','a-','aaa','aa-','a-a','a--','-aa','-a-','--a','---']
x = list(range(len(strings)))
regex_test = r'(?P<Label>(?P<Label_start>[a-zA-Z0-9])((?P<Label_mid>[a-zA-Z0-9-]{1,61})?)(?=(?P<Label_end>[a-zA-Z0-9](?=[./])))(?P=Label_end)?)\.'
if len(strings) == len(results):
for n in x:
if results[n] == bool(re.match(pattern = regex_test, string = strings[n] + '.')):
print("Works.")
if results[n] == True:
print(re.match(pattern = regex_test, string = strings[n] + '.').groupdict())
else:
print("Bug for: " + strings[n])
#print(str(re.match(pattern = regex_test, string = strings[n] + '.',flags=re.DEBUG)))
Mögliche Duplikat [Domain Name Validierung mit RegEx] (https://stackoverflow.com/questions/10306690/domain-name-validation-with-regex) –
Meine regex ist fast genau. Bitte zeigen Sie, warum die Regex nicht mit einem einzelnen Zeichen übereinstimmt. Das würde mir helfen zu verstehen, wo ich in meiner Regex falsch gelaufen bin. Würde es sehr zu schätzen wissen. Außerdem brauche ich nur Hilfe mit dem Label nicht den Hostnamen. Das '.' wird als End-Flag verwendet, da auf diese Regex der Rest des Host-Namens regex folgt und dann der Rest der URL-Regex. –
Ich würde versuchen, mit Ihrer Regex auf etwas wie regex101.com zu spielen. Versuchen Sie auch, die Syntax zu vereinfachen (eliminieren Sie die benannten Gruppen), um Ihren Fehler zu finden. Sie können sie später wieder hinzufügen. –