Ich möchte eine Python Regex entweder eine Klammer oder eine leere Zeichenfolge erfassen. Der übliche Ansatz funktioniert nicht. Ich muss irgendwo etwas entkommen, aber ich habe alles versucht, was ich weiß.Wie passe ich null oder mehr Klammern in Python Regex
one = "this is the first string [with brackets]"
two = "this is the second string without brackets"
# This captures the bracket on the first but throws
# an exception on the second because no group(1) was captured
re.search('(\[)', one).group(1)
re.search('(\[)', two).group(1)
# Adding a "?" for match zero or one occurrence ends up capturing an
# empty string on both
re.search('(\[?)', one).group(1)
re.search('(\[?)', two).group(1)
# Also tried this but same behavior
re.search('([[])', one).group(1)
re.search('([[])', two).group(1)
# This one replicates the first solution's behavior
re.search("(\[+?)", one).group(1) # captures the bracket
re.search("(\[+?)", two).group(1) # throws exception
Ist die einzige Lösung für mich zu überprüfen, dass die Suche zurückgegeben wird Keine?
I‘ d sagen, du brauchst die einfangende Gruppe nicht. Sehen Sie, ob '\ [' übereinstimmt oder nicht. Was sollte der Zweck der Capturing-Gruppe überhaupt sein, wenn das Einzige, was sie erreichen kann, ein einzelner [. – donfuxx
Nicht sicher, was das Problem ist. Sie möchten eine Klammer oder eine leere Zeichenfolge zuordnen. Die zweite Eingabe enthält eine leere Zeichenfolge zwischen den einzelnen Zeichen, sodass sie mit der leeren Zeichenfolge übereinstimmt. – Barmar
Im Allgemeinen sind optionale Elemente in einem regulären Ausdruck nur dann sinnvoll, wenn sie vor oder nach einem anderen Element liegen, das Sie abgleichen möchten. Die Suche selbst macht keinen Sinn - wenn es optional ist, stimmt die Eingabe überein, ob sie enthalten ist oder nicht. – Barmar