Hallo,
vorweg möchte ich mich entschuldigen, wenn diese Frage schon beantwortet wurde, konnte aber nach einer Forumsuche nichts passendes finden.
Ich lese in einem Script eine Textdatei Zeile für Zeile ein. Bei jeder Zeile wird geprüft, ob bestimmte Wörter darin vorkommen. Das funktioniert auch alles einwandfrei. Nur habe ich jetzt das Problem, dass die Suche per if xyz in string wohl nicht exakt arbeitet. Soll heißen wenn ich nach "Haus" suche und im zu durchsuchenden String "Haustür" steht, bekomme ich falsche Ergebnisse.
Nun zur eigentlichen Frage: Kann ich mit dem "in"-Command per Flag oder etwas Ähnlichem sagen, dass er exakt suchen soll oder muss ich mein Script umschreiben auf reguläre expressions, um eine exakte Suche zu bekommen?
Grüße
Exakte Suche nach Wort mit "in" Command möglich?
-
- User
- Beiträge: 55
- Registriert: Montag 2. März 2015, 14:35
- Kontaktdaten:
Das ist exakt. Der Computer kennt keinen semantischen Unterschied zwischen Leerzeichen und Buchstaben - das ist fuer ihn alles eine Zahl, und du fragst, ob eine Reihe von Zahlen hintereinander vorkommen.
Wenn du das anders haben willst, musst du dein Problem anders beschreiben. ZB kannst du mit "der satz mit haus".split() eine Liste erzeugen, in der dann das Wort "haus" ein einzelnes Element darstellt. Darauf mit "in" zu suchen liefert dann ein besseres Ergebnis im Sinne deines Zieles.
Wenn du das anders haben willst, musst du dein Problem anders beschreiben. ZB kannst du mit "der satz mit haus".split() eine Liste erzeugen, in der dann das Wort "haus" ein einzelnes Element darstellt. Darauf mit "in" zu suchen liefert dann ein besseres Ergebnis im Sinne deines Zieles.
-
- User
- Beiträge: 55
- Registriert: Montag 2. März 2015, 14:35
- Kontaktdaten:
Hi, danke für deine Antwort. Das Verfahren mit Split mache ich schon so. in dem bestimmten Fall steht in index[1] z.B. "HSchmitt" und bei einem nächsten Durchlauf kann es sein, dass in diesem Index nur "Schmitt" steht. Bei beiden Durchläufen springt er in den jeweiligen Code unter der if-Abfrage.
Beispiel (in context steht der Inhalt des Textfiles):
So habe ich es momentan (Code vereinfacht). Nur erhalte ich hier eben falsche Werte zurück, wenn z.B. 1x Schmitt als User und einmal HSchmitt als User in der Zeile steht. Aber wenn es nicht anders funktioniert, muss ich es eben auf regex umschreiben. Da habe ich in einem kleinen Beispielscript schon durchgetestet, ob es funktioniert:
Hier kann ich nach dem EXAKTEN Suchwort suchen in einem gegebenen String und erhalte (je nach Suchwort) auch die richtige Ausgabe.
EDIT: Ich glaube, ich habe deine Antwort falsch verstanden. Werde mich gleich nochmal melden.
Beispiel (in context steht der Inhalt des Textfiles):
Code: Alles auswählen
content = f.read().split("\n")
for i in range(len(content)):
if user in content[i]:
xyz = True
else:
xyz = False
Code: Alles auswählen
import re
x = "hallo welt HSchmitt"
searchWord = "Schmitt"
count = re.findall('\\b' + searchWord + '\\b', x, flags=re.IGNORECASE)
if len(count) > 0:
print("Wort ist in String")
else:
print("Wort ist nicht in String")
EDIT: Ich glaube, ich habe deine Antwort falsch verstanden. Werde mich gleich nochmal melden.
Bitte nicht mit
arbeiten. Das geht *so* viel einfacher und idiomatischer mit einem simplen
Und in deinem Fall kannst du dir auch das einlesen sparen:
iteriert schon ueber die Zeilen.
und auch das dicke if ist unnoetig, ein simples
reicht voellig. Last but not least: das split gehoert zur Zeile.
Du kannst natuerlich auch das ganze einfach mit einer Zeile loesen:
Code: Alles auswählen
for i in range(len(liste)):
zeile = liste[i]
Code: Alles auswählen
for zeile in liste:
Code: Alles auswählen
with open("dateiname") as inf:
for line in inf:
und auch das dicke if ist unnoetig, ein simples
Code: Alles auswählen
xyz = user in zeile
Du kannst natuerlich auch das ganze einfach mit einer Zeile loesen:
Code: Alles auswählen
with open("dateiname") as inf:
xyz = user in inf.read().split()
-
- User
- Beiträge: 55
- Registriert: Montag 2. März 2015, 14:35
- Kontaktdaten:
Wow, vielen Dank für die vielen Hilfestellungen, werde mir das mal alles anschauen.