Ich benutze Python Regex, um bestimmte Werte aus einer gegebenen Zeichenfolge zu extrahieren. Das ist mein string:Python: regex findall
mystring.txt
sometext
somemore text here
some other text
course: course1
Id Name marks
____________________________________________________
1 student1 65
2 student2 75
3 MyName 69
4 student4 43
course: course2
Id Name marks
____________________________________________________
1 student1 84
2 student2 73
8 student7 99
4 student4 32
course: course4
Id Name marks
____________________________________________________
1 student1 97
3 MyName 60
8 student6 82
und ich brauche die Kursnamen und entsprechende Markierungen für einen bestimmten Schüler zu extrahieren. Zum Beispiel brauche ich den Kurs und die Markierungen für MyName
aus dem obigen String.
Ich habe versucht:
re.findall(".*?course: (\w+).*?MyName\s+(\d+).*?",buff,re.DOTALL)
Das funktioniert aber nur, wenn MyName vorhanden unter jedem Kurs ist, aber nicht, wenn MyName wird in einigen der natürlich, wie in meinem Beispiel Zeichenfolge fehlt.
Hier bekomme ich Ausgang als: [('course1', '69'), ('course2', '60')]
aber was eigentlich das, was ich will achive ist: [('course1', '69'), ('course4', '60')]
, was die richtige regex hierfür wäre?
#!/usr/bin/python
import re
buffer_fp = open("mystring.txt","r+")
buff = buffer_fp.read()
buffer_fp.close()
print re.findall(".*?course: (\w+).*?MyName\s+(\d+).*?",buff,re.DOTALL)
Danke für die Antwort! – Deepa
was sind die g, s und flags? Ich verstehe s ist gleichbedeutend mit neu zu zeichnen. Ich dachte, g ist für findall, aber dann mit dieser Regex in Python-Code gibt eine andere Ausgabe – Deepa
Aber re.findall (". *? Kurs: (\ w +) (?: (?! \ Bcourse \ b).) * MeinName \ s + (\ d +). *? ", Buff, re.DOTALL) Ausgaben: [('Kurs1', '60')] :( – Deepa