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
Buchstabe aus String löschen...
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'
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
zu machen, vielleicht fällt ja jemandem noch eine elegantere Idee ein...
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
Einfach gleich
Und deine Schleifenbedingung ist glaube ich eine etwas andere, als du vielleicht denkst.
Code: Alles auswählen
line = line[1:]
- Hobbes Hobson
- User
- Beiträge: 42
- Registriert: Sonntag 9. Dezember 2007, 15:24
- Wohnort: Bremen
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
Mal eine ganz andere Frage: Was soll das Programm denn überhaupt machen?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Will hier kein Thread-Hijacking betreiben, aber mir fiel hier grad was auf:
Wieso folgender Code?
anstelle von
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")?
Wieso folgender Code?
Code: Alles auswählen
print("Hallo")
Code: Alles auswählen
print "Hallo"
Ist ein "Hallo" nur eine verkürzte Schreibweise für die Sequenz ("Hallo")?
@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!?
Das Beispiel sieht zu umständlich aus. Warum suchst Du nicht einfach mit dem regulären Ausdruck ohne das '^' am Anfang!?
Threadhijacking ist immer willkommenHyperion hat geschrieben:Will hier kein Thread-Hijacking betreiben, aber mir fiel hier grad was auf:
Wieso folgender Code?anstelle vonCode: 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?)Code: Alles auswählen
print "Hallo"
Ist ein "Hallo" nur eine verkürzte Schreibweise für die Sequenz ("Hallo")?
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
Aus der Wikipedia
Die brauche ich nämlich wenn ich das oben beschriebene nochmal rückwärts für den String machen möchte...
Außerdem möchte ich folgende weitere Frage anschließen, wieso funktioniert folgende logische operation nicht "print listevonzahlen[:listevonzahlen.count - 1]"?Zu Beginn war Perl ein UNIX-Werkzeug, das besonders auf die Verarbeitung von Textdateien, Steuerung anderer Programme sowie zur Ausgabe von Berichten ausgelegt war.
Die brauche ich nämlich wenn ich das oben beschriebene nochmal rückwärts für den String machen möchte...
- Hobbes Hobson
- User
- Beiträge: 42
- Registriert: Sonntag 9. Dezember 2007, 15:24
- Wohnort: Bremen
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.
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.
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.breize hat geschrieben:Mein Kommentar bezog sich eigentlich darauf das Skriptsprachen ja oft genutzt werden um Strings zu manipulieren (siehe Perl).
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."print listevonzahlen[:listevonzahlen.count - 1]"?
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.
- Hobbes Hobson
- User
- Beiträge: 42
- Registriert: Sonntag 9. Dezember 2007, 15:24
- Wohnort: Bremen
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)
Und deswegen kann man das auch auf andere Scriptsprachen induzieren.breize hat geschrieben:Aus der WikipediaZu Beginn war Perl ein UNIX-Werkzeug, das besonders auf die Verarbeitung von Textdateien, Steuerung anderer Programme sowie zur Ausgabe von Berichten ausgelegt war.
mfg
Thomas :-)
Thomas :-)
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
Den kram vor dem http:// bekommst du ganz einfach weg, indem du nach der Position von "http" suchst.. (siehe dazu die String-Methode find) und eben alles vor dieser Position per Slicing wegloescht.
Wie schon haeufig erwaehnt ist das was du mit "zeichenkette.count" erreichen moechtest, mit len(zeichenkette) erreichbar.
Du solltest dich evtl mal mit der Dokumentation auseinandersetzen:
achja... bevor du dich daran machst, Fragezeichen in deinem Code zu verwenden: Das ist IPython und Fragezeichen gibt es auch nur dort und nicht in Python selbst...
EDIT:
das geht auch kuerzer:
[:-1] ist also mit einem "bis zum vorletzten Zeichen" zu uebersetzen.
Wie schon haeufig erwaehnt ist das was du mit "zeichenkette.count" erreichen moechtest, mit len(zeichenkette) erreichbar.
Du solltest dich evtl mal mit der Dokumentation auseinandersetzen:
Code: Alles auswählen
In [18]: str.count?
Type: method_descriptor
Base Class: <type 'method_descriptor'>
String Form: <method 'count' of 'str' objects>
Namespace: Python builtin
Docstring:
S.count(sub[, start[, end]]) -> int
Return the number of non-overlapping occurrences of substring sub in
string S[start:end]. Optional arguments start and end are interpreted
as in slice notation.
EDIT:
Code: Alles auswählen
print listevonzahlen[:len(listevonzahlen)-1]
Code: Alles auswählen
print listevonzahlen[:-1]
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Hey, danke für eure Antworten, macht ja richtig Spass hier
Ich denke die Lösung von "Hobbes Hobson" macht für meine Anwendung am meisten Sinn, ich hatte mich noch nicht so weitgehend mit den Regex befasst das mir diese Möglichkeit hätte bekannt sein können.
Die Sache mit dem Slicing ist allerdings auch nett, ist mir in dieser Hinsicht aber auch neu, da ich jetzt relativ lange nur in VB6 (Ja hier kann man zurecht Buh-Rufen) programmiert habe.... Aber wie war das, "Wer einmal in Basic programmiert hat ist unwiderbringlich verloren"?
Ich denke die Lösung von "Hobbes Hobson" macht für meine Anwendung am meisten Sinn, ich hatte mich noch nicht so weitgehend mit den Regex befasst das mir diese Möglichkeit hätte bekannt sein können.
Die Sache mit dem Slicing ist allerdings auch nett, ist mir in dieser Hinsicht aber auch neu, da ich jetzt relativ lange nur in VB6 (Ja hier kann man zurecht Buh-Rufen) programmiert habe.... Aber wie war das, "Wer einmal in Basic programmiert hat ist unwiderbringlich verloren"?
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
Ich mag dieses Forum auchbreize hat geschrieben:Hey, danke für eure Antworten, macht ja richtig Spass hier
Wenn du diese Moeglichkeit benutzt, sollte deine RegEx aber auch vernuenftig sein...breize hat geschrieben:Ich denke die Lösung von "Hobbes Hobson" macht für meine Anwendung am meisten Sinn, ich hatte mich noch nicht so weitgehend mit den Regex befasst das mir diese Möglichkeit hätte bekannt sein können.
Ein Beispiel waere da zB:
Code: Alles auswählen
"((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\w+@)?(([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,6})))((:[\d]{1,5})?)?((/?\w+/)+|/?)([\w\-]+\.[\w]{3,4})?([,]\w+)*((\?\w+=\w+)?(&\w+=\w+)*([,]\w*)*)?"
Ach das will ich doch mal nicht hoffen... sonst waere meine ganze Ueberzeugungsarbeit (alla Nimm doch Python *huestel*) total umsonstbreize hat geschrieben:Aber wie war das, "Wer einmal in Basic programmiert hat ist unwiderbringlich verloren"?
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2