Buchstabe aus String löschen...

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.
Benutzeravatar
breize
User
Beiträge: 7
Registriert: Dienstag 27. November 2007, 20:02

Buchstabe aus String löschen...

Beitragvon breize » Dienstag 18. Dezember 2007, 19:27

Hallo zusammen,
ich habe eine kleine Frage bezüglich Strings. Mit "string.lstrip()" ist es ja mögloch ein Zeichen aus einem String zu entfernen, was mache ich aber wenn mir egal ist welches Zeichen entfernt wird, wenn ich also einfach das erste Zeichen des Strings löschen will?

Besten Dank im Vorraus

Breise
BlackJack

Beitragvon BlackJack » Dienstag 18. Dezember 2007, 19:46

Direkt aus der Zeichenkette etwas entfernen kann man nicht, weil Zeichenketten in Python nicht verändert werden können. Du kannst aber eine neue Zeichenkette ohne das erste Zeichen durch "slicing" bekommen:

Code: Alles auswählen

In [35]: 'hallo'[1:]
Out[35]: 'allo'
Benutzeravatar
breize
User
Beiträge: 7
Registriert: Dienstag 27. November 2007, 20:02

Beitragvon breize » Dienstag 18. Dezember 2007, 19:59

Das ist aber doch für eine Scriptsprache relativ erbärmlich, und außerdem nicht gut automatisierbar.

Mein Problem ist, dass ich einen String solange bearbeiten möchte bis er eine Regex matcht.

Meine Momentane Idee ist, es so

Code: Alles auswählen

from re import *

re_forDeletingBeforeLink = compile('^http://.*')
line='datenmülldatenoasdasdasdhttp://images.del.icio.us/static/img/delicious.small.gif" width="10" height="10" alt="" /> <a href="http://del.icio.us/">del.icio.us</a></li><li><a href="http://del.icio.us/about">about</a></li><li><a href="http://blog.del.icio.us/">blog</a></li><li><a href="http://del.icio.us/help/terms">terms of service</a></li><li><a href="http://del.icio.us/help/privacy">privacy policy</a></li><li><a href="http://del.icio.us/help/copyright">copyright policy</a></li><li><a href="http://del.icio.us/help/support">support</a></li><li><a class="rss" href="/rss/" title="RSS"><img src="http://images.del.icio.us/static/img/rss.gif" width="36" height="14" alt="RSS" /></a> feed for this page</li></ul>'

while line.count > 0:
    line2 = line[1:]
    line = line2
    if re_forDeletingBeforeLink.match(line):
        print('Regular Expression matched!')
        print(line)
        break


zu machen, vielleicht fällt ja jemandem noch eine elegantere Idee ein...
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Beitragvon Trundle » Dienstag 18. Dezember 2007, 20:08

Einfach gleich

Code: Alles auswählen

line = line[1:]


Und deine Schleifenbedingung ist glaube ich eine etwas andere, als du vielleicht denkst.
Benutzeravatar
Hobbes Hobson
User
Beiträge: 42
Registriert: Sonntag 9. Dezember 2007, 15:24
Wohnort: Bremen

Beitragvon Hobbes Hobson » Dienstag 18. Dezember 2007, 20:18

Code: Alles auswählen

import re

re_forDeletingBeforeLink = re.compile('^http://.*')

line='datenmüll'

while len(line) > 0:
    line = line[1:]
    if re_forDeletingBeforeLink.match(line):
        print('Regular Expression matched!')
        print(line)
        break


Sternchenimport habe ich mal rausgenomme und .count mit der Funktion len ersetzt. (count(arg) zählt ein Zeichen)


Mal eine ganz andere Frage: Was soll das Programm denn überhaupt machen?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Dienstag 18. Dezember 2007, 20:50

Will hier kein Thread-Hijacking betreiben, aber mir fiel hier grad was auf:
Wieso folgender Code?

Code: Alles auswählen

print("Hallo")

anstelle von

Code: Alles auswählen

print "Hallo"

Ist aus vorgreifender "Kompatibilität" zu Python3000? (Also damit das später automatisch als Funktion aufgesasst wird und leichter anpassbar ist?)
Ist ein "Hallo" nur eine verkürzte Schreibweise für die Sequenz ("Hallo")?
BlackJack

Beitragvon BlackJack » Dienstag 18. Dezember 2007, 20:50

@breize: Ich sehe jetzt nicht was daran "erbärmlich" ist? Und was hat das mit Skriptsprachen zu tun? In Java sind Zeichenketten auch nicht veränderbar.

Das Beispiel sieht zu umständlich aus. Warum suchst Du nicht einfach mit dem regulären Ausdruck ohne das '^' am Anfang!?
Benutzeravatar
breize
User
Beiträge: 7
Registriert: Dienstag 27. November 2007, 20:02

Beitragvon breize » Dienstag 18. Dezember 2007, 20:57

Hyperion hat geschrieben:Will hier kein Thread-Hijacking betreiben, aber mir fiel hier grad was auf:
Wieso folgender Code?

Code: Alles auswählen

print("Hallo")

anstelle von

Code: Alles auswählen

print "Hallo"

Ist aus vorgreifender "Kompatibilität" zu Python3000? (Also damit das später automatisch als Funktion aufgesasst wird und leichter anpassbar ist?)
Ist ein "Hallo" nur eine verkürzte Schreibweise für die Sequenz ("Hallo")?


Threadhijacking ist immer willkommen :D

Ich finde das ganze einfach sauberer. Print ist auch eine Funktion, wieso sollte ich das dann nicht der Übersichtlichkeit halber als Funktion schreiben, wenn das ganze dann auchnoch vorausgreifender Kompatibilität dient und ich es damit auch legitimieren kann ist mir das nur recht ;)

@BlackJack

Mein Kommentar bezog sich eigentlich darauf das Skriptsprachen ja oft genutzt werden um Strings zu manipulieren (siehe Perl).

Den Regex habe ich so gebaut weil ich alles vor "http" weghaben möchte und genau dann der Regex greifen soll.
Falls du eine bessere Lösung mit einer anderen Regex hast, teile Sie mit bitte mit :wink:
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Dienstag 18. Dezember 2007, 21:12

breize hat geschrieben:Mein Kommentar bezog sich eigentlich darauf das Skriptsprachen ja oft genutzt werden um Strings zu manipulieren (siehe Perl).


Seit wann das denn?
mfg

Thomas :-)
Benutzeravatar
breize
User
Beiträge: 7
Registriert: Dienstag 27. November 2007, 20:02

Beitragvon breize » Dienstag 18. Dezember 2007, 21:14

Aus der Wikipedia
Zu Beginn war Perl ein UNIX-Werkzeug, das besonders auf die Verarbeitung von Textdateien, Steuerung anderer Programme sowie zur Ausgabe von Berichten ausgelegt war.


Außerdem möchte ich folgende weitere Frage anschließen, wieso funktioniert folgende logische operation nicht "print listevonzahlen[:listevonzahlen.count - 1]"?

Die brauche ich nämlich wenn ich das oben beschriebene nochmal rückwärts für den String machen möchte...
Benutzeravatar
Hobbes Hobson
User
Beiträge: 42
Registriert: Sonntag 9. Dezember 2007, 15:24
Wohnort: Bremen

Beitragvon Hobbes Hobson » Dienstag 18. Dezember 2007, 21:15

Was ist denn dein Gesamtproblem?

Du möchtest einen Link aus einem String herauslesen? Oder einfach nur alles vor dem ersten http:// löschen?


--------


Zu deiner Frage: .count wird erstmal mit () aufgerufen und dient dazu ein bestimmtes Zeichen in einem String zu zählen.
Benutzeravatar
breize
User
Beiträge: 7
Registriert: Dienstag 27. November 2007, 20:02

Beitragvon breize » Dienstag 18. Dezember 2007, 21:18

Ja genau, ich will einfach nur den Link haben
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Dienstag 18. Dezember 2007, 21:23

breize hat geschrieben:Mein Kommentar bezog sich eigentlich darauf das Skriptsprachen ja oft genutzt werden um Strings zu manipulieren (siehe Perl).
Nur weil man eine Sprache als Scriptsprache einsetzen kann, heißt das noch lange nicht, dass man damit toll Strings manipulieren kann oder gar, dass sie ein Perl-Klon ist. AppleScript wurde dazu bestimmt nicht geschaffen.

"print listevonzahlen[:listevonzahlen.count - 1]"?

Weil listevonzahlen.count eine Funktion und keine Eigenschaft ist die du zudem noch völlig falsch benutzten willst. Siehe Hobbes ersten Post. Eigentlich müsste dein Code jede Menge hilfreiche Exceptions werfen.

Versuchs mal mit

Code: Alles auswählen

print listevonzahlen[:len(listevonzahlen)-1]
Zuletzt geändert von Darii am Dienstag 18. Dezember 2007, 21:28, insgesamt 1-mal geändert.
Benutzeravatar
Hobbes Hobson
User
Beiträge: 42
Registriert: Sonntag 9. Dezember 2007, 15:24
Wohnort: Bremen

Beitragvon Hobbes Hobson » Dienstag 18. Dezember 2007, 21:27

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding:  iso-8859-15 -*-

import re

ausdr = re.compile('(http://.*?)[\s|"]')

line='datenmülldatenoasdasdasdhttp://images.del.icio.us/static/img/delicious.small.gif" width="10" height="10" alt="" /> <a href="http://del.icio.us/">del.icio.us</a></li><li><a href="http://del.icio.us/about">about</a></li><li><a href="http://blog.del.icio.us/">blog</a></li><li><a href="http://del.icio.us/help/terms">terms of service</a></li><li><a href="http://del.icio.us/help/privacy">privacy policy</a></li><li><a href="http://del.icio.us/help/copyright">copyright policy</a></li><li><a href="http://del.icio.us/help/support">support</a></li><li><a class="rss" href="/rss/" title="RSS"><img src="http://images.del.icio.us/static/img/rss.gif" width="36" height="14" alt="RSS" /></a> feed for this page</li></ul>'

list = re.findall(ausdr, line)
print(list)


Wie wäre es denn damit?
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Dienstag 18. Dezember 2007, 21:35

breize hat geschrieben:Aus der Wikipedia
Zu Beginn war Perl ein UNIX-Werkzeug, das besonders auf die Verarbeitung von Textdateien, Steuerung anderer Programme sowie zur Ausgabe von Berichten ausgelegt war.


Und deswegen kann man das auch auf andere Scriptsprachen induzieren. :lol:
mfg



Thomas :-)

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]