Entfernen Sie Elemente in der eckigen Klammer eines Strings aus Python

Oct 22 2020

Ich muss die Elemente in der eckigen Klammer einer Zeichenfolge entfernen. Ich kann jedoch nicht die gewünschten Ergebnisse erzielen.

Unten ist die gewünschte Ausgabe, die ich erhalten muss:

Beispiel für die Ausgabe

[[Apfel] .png -> [.png

[Apfel]]. png ->] .png

[[Apfel]]. png -> [] .png

[ein] Apfel [adaykeeps]] der [[Doktor] away.png -> Apfel] der [away.png

Im Folgenden sind die Methoden aufgeführt, die ich verwendet habe, aber nicht die erforderliche Ausgabe erhalten konnte:

Regex-Methode

file = re sub (r '(\ d * \ D + \ d *) \ s +', '', re sub (r '{. +? # (\ d +). \ d +)}', r '( \ 1) ', Datei));

SubString-Methode

openbracket = file.find ('['); closebracket = file.find (']');

if len (Datei)> closebracket: file = file [0: openbracket:] + file [closebracket + 1 ::]

Antworten

2 Nick Oct 22 2020 at 11:23

Sie können dies mit Regex tun; Ihre Regex muss mit a übereinstimmen, [gefolgt von einer Anzahl von Nicht- [oder ]Zeichen bis a ], und diese Zeichenfolge durch nichts ersetzen:

import re

strings = ['[[apple].png', '[apple]].png', '[[apple]].png', '[an]apple[adaykeeps]]the[[doctor]away.png']

for s in strings:
    name = re.sub(r'\[[^][]*\]', '', s)
    print(name)

Ausgabe:

[.png
].png
[].png
apple]the[away.png

Dieser Code wird durch []eine leere Zeichenfolge ersetzt. Wenn dies nicht das gewünschte Verhalten ist, ändern Sie das *in der Regex in a +.