String vergleichen

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.
Antworten
boostpy2005
User
Beiträge: 31
Registriert: Freitag 31. März 2006, 14:15

Mittwoch 10. Mai 2006, 08:10

Hallo!

ich habe Problem mit dem Stringvergleich.

z.B. aString ="Test\\Me\Mine" & subString = "Test" OR subString "TeSt"
import re
matchObj = re.compile(subString, re.I)
matchObj.sub("", aString) ==> "\\Me"

ganz OK!

Aber wenn subString = "Test\\Me", dann geht überhaupt nichts mehr!
ich vermute, es liegt darin "\\"

Bitte um Hinweis! (Ich wollte den Text entfernen, egal klein oder groß geschrieben, aber den Rest klein & groß beibehalten!)
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

Mittwoch 10. Mai 2006, 13:41

also normalerweise vergleiche ich Strings immer mit dem string Modul siehe hier und dann benutzt man einfach find()...

Falls es Probleme mot den \\ geben sollte, dann schreibe einfach:

aString = r'Test\Me\Mine' anstatt ... "Test\\Me\\Mine" das Ergebnis ist das gleiche, du solltest dann allerdings sicherheitshalber alle Strings so "formatieren" (ich glaube raw-String nennt sich das)

Definition find():
find( s, sub[, start[,end]])
Return the lowest index in s where the substring sub is found such that sub is wholly contained in s[start:end]. Return -1 on failure. Defaults for start and end and interpretation of negative values is the same as for slices.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Mittwoch 10. Mai 2006, 13:59

Unabhaengig von Gross-/Kleinschreibung wird es, wenn du vorruebergehend alles nach nur-Kleinschreibung konvertierst (mit lower):

Code: Alles auswählen

>>> test = "HalloWelt!"
>>> suche = "welt"
>>> test2 = "Guten Tag wElT"
>>> test.lower().find(suche)
5
>>> test2.lower().find(suche)
10
>>>
Hier wird z.B. "Welt" und "wElT" gefunden und dessen Position im Test-String zurueckgegeben.
boostpy2005
User
Beiträge: 31
Registriert: Freitag 31. März 2006, 14:15

Mittwoch 10. Mai 2006, 14:14

Rebecca hat geschrieben:Unabhaengig von Gross-/Kleinschreibung wird es, wenn du vorruebergehend alles nach nur-Kleinschreibung konvertierst (mit lower):

Code: Alles auswählen

>>> test = "HalloWelt!"
>>> suche = "welt"
>>> test2 = "Guten Tag wElT"
>>> test.lower().find(suche)
5
>>> test2.lower().find(suche)
10
>>>
Hier wird z.B. "Welt" und "wElT" gefunden und dessen Position im Test-String zurueckgegeben.
Danke!
diese Umwandeltung ist nicht für meinen Fall:
1. der Rest wollte ich nicht durch die Umwandelung geändert werden.
2. weiß ich nicht, ob es "\" oder "/" vorhanden sind.
3. ich brauche nicht nur finden, sondern auch gefundene löschen
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Mittwoch 10. Mai 2006, 14:59

boostpy2005 hat geschrieben:1. der Rest wollte ich nicht durch die Umwandelung geändert werden.
Der urspruengliche Text wird ja gar nicht geandert. (Probier's mal aus und verstehe es!)
boostpy2005 hat geschrieben:3. ich brauche nicht nur finden, sondern auch gefundene löschen
Du weisst, an welcher Position du anfangen musst zu loeschen, und kannst ausrechnen, an welcher Stelle du aufhoren musst, da in diesem Fall ja die Laenge des Suchstrings bekannt ist. Wo ist das Problem?

Ansonsten waeren vielleicht Regular Expressions was fuer dich.
boostpy2005
User
Beiträge: 31
Registriert: Freitag 31. März 2006, 14:15

Mittwoch 10. Mai 2006, 15:08

ich habe re wie früher verwendet. Aber vorher muss ich "\\" durch "/" ersetzen. So geht es!

Code: Alles auswählen

import re 
subString =subString.replace("\\", "/")
aString = aString.replace("\\", "/")
matchObj = re.compile(subString, re.I) 
matchObj.sub("", aString)  
Danke Rebecca & Buell
Antworten