6 Stimmen

Element in einer Zeichenkette ersetzen, wenn es mit einem Element in der Liste übereinstimmt

Ich versuche, Wörter aus einer Zeichenkette zu entfernen, wenn sie mit einer Liste übereinstimmen.

x = "How I Met Your Mother 7x17 (HDTV-LOL) [VTV] - Mon, 20 Feb 2012"

tags = ['HDTV', 'LOL', 'VTV', 'x264', 'DIMENSION', 'XviD', '720P', 'IMMERSE']

print x

for tag in tags:
    if tag in x:
        print x.replace(tag, '')

Es erzeugt diese Ausgabe:

How I Met Your Mother 7x17 (HDTV-LOL) [VTV] - Mon, 20 Feb 2012
How I Met Your Mother 7x17 (-LOL) [VTV] - Mon, 20 Feb 2012
How I Met Your Mother 7x17 (HDTV-) [VTV] - Mon, 20 Feb 2012
How I Met Your Mother 7x17 (HDTV-LOL) [] - Mon, 20 Feb 2012

Ich möchte, dass es entfernt wird todos die Wörter, die der Liste entsprechen.

17voto

NPE Punkte 462670

Sie behalten nicht das Ergebnis der x.replace() . Versuchen Sie stattdessen das Folgende:

for tag in tags:
    x = x.replace(tag, '')
print x

Beachten Sie, dass Ihr Ansatz mit jeder Teilzeichenkette übereinstimmt, und nicht nur mit ganzen Wörtern. Zum Beispiel würde es die LOL sur RUN LOLA RUN .

Eine Möglichkeit, dieses Problem zu lösen, wäre, jedes Tag in ein Paar von r'\b' Zeichenketten, und suchen Sie nach den resultierenden regulärer Ausdruck . Die r'\b' würde nur an Wortgrenzen übereinstimmen:

for tag in tags:
    x = re.sub(r'\b' + tag + r'\b', '', x)

7voto

Sven Marnach Punkte 525472

Die Methode str.replace() ändert die Zeichenkette nicht an Ort und Stelle - Zeichenketten sind in Python unveränderlich. Sie müssen x auf die neue Zeichenkette, die von replace() in jeder Iteration:

for tag in tags:
    x = x.replace(tag, "")

Beachten Sie, dass die if Aussage ist redundant; str.replace() wird nichts tun, wenn es keine Übereinstimmung findet.

4voto

eumiro Punkte 193562

Verwendung Ihrer Variablen tags y x können Sie dies verwenden:

output = reduce(lambda a,b: a.replace(b, ''), tags, x)

zurück:

'How I Met Your Mother 7x17 (-) [] - Mon, 20 Feb 2012'

1voto

Marcin Punkte 46457

(1) x.replace(tag, '') ändert nicht x sondern gibt stattdessen eine nuevo String mit der Ersetzung.

(2) Warum wird bei jeder Iteration gedruckt?

Die einfachste Änderung, die Sie vornehmen könnten, wäre:

for tag in tags:
     x = x.replace(tag, '')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X