Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Ich möchte ein Platzhalter der x- beliebigen Zahlen/Buchstaben zwischen den Klammern mit einen Platzhalter versehen.
Es ist ungewiss wie viele Zahlen/Buchstaben es sind.
Beim regular hab ich es so:
Mit re.sub() kann man mittels regulärer Ausdrücke Ersetzungen durchführen. Der gezeigte reguläre Ausdruck selektiert aber einfach jede beliebige Zeichenkette. Klammern haben Bedeutung in Regex und wenn sie als Zeichen vorkommen sollen, müssen sie mit einem vorangestellten \ escaped werden. Ich habe nicht genau verstanden, was du meinst. Soll x zwischen Klammern jetzt ein Platzhalter für je ein Zeichen sein?
Zuletzt geändert von nezzcarth am Freitag 1. November 2019, 07:41, insgesamt 2-mal geändert.
Das mit den klammer war jetzt nur ein Beispiel, ja es sind x-beliebige und auch x-beliebig viele Zahlen/Buchstaben zwischen den Klammern, alles soll mit "" " (nichts) ersetzt werden.
Ich möchte ein Platzhalter der x- beliebigen Zahlen/Buchstaben zwischen den Klammern mit einen Platzhalter versehen.
Der Code passt nicht wirklich zur Beschreibung. Willst du nur den Inhalt der Klammern ersetzen oder sollen die Klammern auch wegfallen? Bei deinem Code sehe ich gar keinen Platzhalter, sondern es wird einfach alles gelöscht. Das ist verwirrend...
Das könnte man in dem konkreten Beispiel mit dem regulären Ausdruck '2[^2]+2' erledigen. Der matched aber außer 22 alles, was zwischen zwei Zweien steht (Buchstaben, Whitespace, andere Zahlen,...) bis zur letzten 2 im String. Inkl. dieser selbst. Möchtest du das?
Wie soll denn das ersetz werden: 2abc2def2 ? Ganz?
Dann steckt da Logik drin, nach der die Ersetzung durchgeführt wird. Dann ist das Problem nicht so trivial zu lösen.
Es würde vermutlich erheblich helfen, wenn man das konkrete Problem sehen würde und nicht etwas, "das so ähnlich aussieht".
Wenn sowohl Start- als auch Endzeichen da selbe Zeichen sind - und das Zeichen dazwischen aber ebenfalls auftreten kann (wie in dem Beispiel von nezzcarth), ist es ohne den Gesamtkontenxt zu kennen, unmöglich zu bestimmen, welches Zeichen nun was bedeutet.
OK, konkretes Beispiel wäre, ich habe eine html Datei, mit vielen "<>" die Kopfdaten müssen weg.
In regular kann ich sie ja alle finden. Nur mein Problem ist es dann mit "replace" dies zu entfernen. Weil ja die Daten unterschiedlichen Inhalt haben, aber das "<" und ">" sind immer gleich.
Was hast Du schon versucht? Mach mal ein konkretes Beispiel mit realen Inputdaten und dem was Du als Output erwartest und was Du dafür schon probiert hast.
Sorry ich meinte xml Seite, wo vor und nach dem eigentlichen string eine Anweisung steht. Beispiel: "<xxx>mein text</xxx>"
Zum Schluss soll nur "mein text" stehen bleiben. mehr nicht.
@egon11: Was denn nun HTML oder XML? Bei HTML ist der Begriff „Kopfdaten“ wahrscheinlich falsch gewählt, denn da würden die meisten den Inhalt vom <head>-Element drunter verstehen.
Du musst den `Beatiful*Soup()`\s das *ganze* Dokument übergeben und nicht nur eine einzelne Zeilen. Und wenn ich das richtig verstanden habe solltest Du den umgekehrten Weg gehen: Nicht irgendwas entfernen wollen, sondern nur den Text selektieren. Das ist ganz einfach, da gibt's ein `text`-Attribut für.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__blackjack__ hat geschrieben: ↑Freitag 1. November 2019, 10:18
solltest Du den umgekehrten Weg gehen: Nicht irgendwas entfernen wollen, sondern nur den Text selektieren
Na dann: Auf mit der xml-Datei hinein in Beautiful Soup, durch die Tags laufen (im besten Fall haben die eine feste Struktur, denn dafür ist XML da) und aus den Tags den Text geholt.
Das funktioniert auch für das komplette Dokument, falls dir das reicht. Da du aber um die Problemerklärung streifst wie mein Kater um das Essen der Katze, weiß man das leider nicht so genau.
Wenn es XML ist, dann nimmt man nicht BeautifulSoup sondern einfach ElementTree. Und je nach Struktur nimmt man dann findtext.
Aber Du hast immer noch nicht Deine realen Daten gezeigt, alles was Du bisher verraten hast, hat sich im Nachhinein als etwas ganz anderes herausgestellt.