Hallo,
Ich bin eine Biologiestudentin und hab mich diese Semester sehr viel mit Programmieren beschäftigt, weil ich das für meine Ökologie-Diplomarbeit brauche.
Und jetzt hab ich an euch Junx hier die Frage, ob ich einen regex-typ umwandeln kann bzw. wie ich Zugriff darauf bekomme.
Also ich bekomm z.B.: nach einem Suchvorgang eine Liste als Ergebnis mit meinen gesuchten "matches". Und wenn ich jetzt abfrage, was das für ein Typ ist, steht: "Nonetype".
Und ich möchte ja schließlich wissen wie viele Suchergebnisse meine Suche erzielt hat.
Bitte, bitte helft mir. Bin schon sooooo verzweifelt.
Vielen Dank schon im Voraus!
Bussi
Eure Lilo
Zugriff auf regex-type
-
- User
- Beiträge: 3
- Registriert: Samstag 28. Januar 2012, 21:07
________________________________
---------------------------------------------
Love begins with a smile, goes by a kiss
and ends with tears in your eyes!
---------------------------------------------
================================
Hallo Lilo,
das Ergebnis der Suche sollte auf jeden Fall nicht `NoneType` sein. Wir wissen leider nicht, wie du denn deine Liste an Suchergebnissen erhältst und können dir deshalb bis jetzt keine sehr große Hilfe sein. Kannst du uns bitte darüber aufklären?
Hier allerdings trotzdem ein kleines Beispiel, wie man Regular Expressions in Python benutzt:Viele Grüße
Edit: Das ist vielleicht auch ganz interessant:
das Ergebnis der Suche sollte auf jeden Fall nicht `NoneType` sein. Wir wissen leider nicht, wie du denn deine Liste an Suchergebnissen erhältst und können dir deshalb bis jetzt keine sehr große Hilfe sein. Kannst du uns bitte darüber aufklären?
Hier allerdings trotzdem ein kleines Beispiel, wie man Regular Expressions in Python benutzt:
Code: Alles auswählen
import re
TEXT = "a = 1; b = 2;"
print ', '.join(re.findall(r'\D\w*\s*=\s*(\d+);', TEXT))
Edit: Das ist vielleicht auch ganz interessant:
Code: Alles auswählen
'; '.join(map(' = '.join, re.findall(r'(\D\w*)\s*=\s*(\d+);', 'a=1; b=2;')))
Zuletzt geändert von nomnom am Samstag 28. Januar 2012, 21:41, insgesamt 1-mal geändert.
-
- User
- Beiträge: 3
- Registriert: Samstag 28. Januar 2012, 21:07
Hey Junx,
Vielen Dank für die rasche Antwort, Nomnom und Webspider!
Okay, also was hab ich gemacht:
Zuerst eine Such-Funktion definiert:
def Find_Tiere(pat, text):
match=re.findall(pat, text, re.IGNORECASE)
if match: print match
else: print "not found"
Dann hab ich über "raw_input" die jeweiligen Parameter für "pat" und "text" definiert, also was ich wo suchen will.
Und ich erhalte eine Liste mit den Ergebnissen... Also sowas: [Affe, affe]
Und dann will ich die Ergebnisse zählen lassen, also z.B.: hier: Ergebniss = 2!
Nur irgendwie kann ich auf die Liste nicht zugreifen.
Eure Lilo
Vielen Dank für die rasche Antwort, Nomnom und Webspider!
Okay, also was hab ich gemacht:
Zuerst eine Such-Funktion definiert:
def Find_Tiere(pat, text):
match=re.findall(pat, text, re.IGNORECASE)
if match: print match
else: print "not found"
Dann hab ich über "raw_input" die jeweiligen Parameter für "pat" und "text" definiert, also was ich wo suchen will.
Und ich erhalte eine Liste mit den Ergebnissen... Also sowas: [Affe, affe]
Und dann will ich die Ergebnisse zählen lassen, also z.B.: hier: Ergebniss = 2!
Nur irgendwie kann ich auf die Liste nicht zugreifen.
Eure Lilo
________________________________
---------------------------------------------
Love begins with a smile, goes by a kiss
and ends with tears in your eyes!
---------------------------------------------
================================
So sollte es gehen:Wie hast du es denn versucht?
Code: Alles auswählen
import re
def finde_tiere(pattern, text):
matches = re.findall(pattern, text, re.I) # re.I ist dasselbe wie re.IGNORECASE
print ', '.join(matches) or 'Keine Tiere gefunden'
print 'Es wurden {} Tiere gefunden.'.format(len(matches))
if __name__ == '__main__':
tiertext = 'Der Affe kann gut klettern, der Fisch gut schwimmen.'
finde_tiere('(Affe|Fisch)', tiertext)
print
finde_tiere('(Fuchs|Dachs)', tiertext)
-
- User
- Beiträge: 3
- Registriert: Samstag 28. Januar 2012, 21:07
Okay Danke dir!
Hast mir sehr geholfen.
Also ich hab es jetzt so gemacht, wie du mir gerate hast und es funktioniert super!
Und wenn ich mir jetzt angeben lassen will, was alles falsch ist in meiner Suche, also die Anzahl der falschen Buchstaben, wollte ich einfach von der Text-Länge die Pat-Länge abziehen und das geht auch super.
Also so:
print "{} Fehler!" .format(len(text)-len(matches))
Und jetzt hab ich noch eine "Fehler" Funktionsvariable definiert, und diese brauch ich damit meine Suchfunktion nur bis z.B.: einer Anzahl von 2 Fehlern sucht.
Wenn ich jetzt aber sage:
if Fehler < (len(text)-len(matches)):
text[mismatches:] #um meine Text zu verkürzen
...dann funktioniert das aber irgendwie nicht.
Wär echt nett, wenn du mir nochmal helfen könntest.
Liebe, liebe Grüße
Eure Lilo
Hast mir sehr geholfen.
Also ich hab es jetzt so gemacht, wie du mir gerate hast und es funktioniert super!
Und wenn ich mir jetzt angeben lassen will, was alles falsch ist in meiner Suche, also die Anzahl der falschen Buchstaben, wollte ich einfach von der Text-Länge die Pat-Länge abziehen und das geht auch super.
Also so:
print "{} Fehler!" .format(len(text)-len(matches))
Und jetzt hab ich noch eine "Fehler" Funktionsvariable definiert, und diese brauch ich damit meine Suchfunktion nur bis z.B.: einer Anzahl von 2 Fehlern sucht.
Wenn ich jetzt aber sage:
if Fehler < (len(text)-len(matches)):
text[mismatches:] #um meine Text zu verkürzen
...dann funktioniert das aber irgendwie nicht.
Wär echt nett, wenn du mir nochmal helfen könntest.
Liebe, liebe Grüße
Eure Lilo
________________________________
---------------------------------------------
Love begins with a smile, goes by a kiss
and ends with tears in your eyes!
---------------------------------------------
================================
`len(matches)` ist ja auch die Anzahl der Treffer, und nicht die Anzahl der Buchstaben der Treffer. Da müsstest du mit `len(' '.join(matches))` die Treffer aneinanderreihen und die Buchstaben zählen. Außerdem ist es eher `text[:mismatches]`, da du ja den Text von Anfang bis zum zweiten Fehler brauchst.