2
繼this question之後,我開始考慮在字符串中添加更多的層次。例如,這是我的字符串:Python:正則表達式findall子類?
sometext
somemore text here
some other text
course: course1
some details
TestName: test1
some other details
Id Name marks
____________________________________________________
1 student1 65
2 student2 75
3 MyName 69
4 student4 43
some details
TestName: test3
some other details
Id Name marks
____________________________________________________
1 student1 23
3 MyName 63
4 student4 64
course: course2
some details
TestName: test2
some other details
Id Name marks
____________________________________________________
1 student1 84
2 student3 73
some details
TestName: test5
some other details
Id Name marks
____________________________________________________
1 MyName 84
2 student2 73
course: course4
some details
TestName: test1
some other details
Id Name marks
____________________________________________________
1 student1 58
2 student3 89
some details
TestName: test2
some other details
Id Name marks
____________________________________________________
1 student1 97
3 MyName 60
8 student6 82
我想了解MyName
的詳細信息。像(course1,test1,69),(course1,test3,63),(course2,test5,84),(course4,test2,60)
或類似輸出的輸出。
我無法做到在一個單一的步驟,因此想出了這個:
import re
eachcourse = re.split(r'course: \w+',string1)
courselist = re.findall(r'course: (\w+)',string1)
li =[]
for i,course in enumerate(courselist):
match = re.findall(r".*?TestName: (\w+)(?:(?!\TestName\b).)*MyName\s+(\d+).*?",eachcourse[i+1],re.DOTALL)
li.append((course,match))
print li
這給了我
[('course1', [('test1', '69'), ('test3', '63')]), ('course2', [('test5', '84')]), ('course4', [('test2', '60')])]
是否還有更好的和更清潔的方式?
謝謝。
精彩!!非常感謝!只是,還有一個疑問。當Iam使用非常大的字符串時,這種方式是否可取?說25頁長的數據? 我注意到返回結果所花費的時間取決於字符串的長度以及字符串中MyName的出現次數。基於MyName For Eg的出現次數,它從0.05秒到50秒不等。在25頁的字符串中出現18次需要0.05秒,1次出現需要50.2秒。只需要建議這是否是最好的方法? – Deepa
@Deepa這應該工作,但正則表達式通常不會給出好的性能。最佳方法可以解析通過CSV或其他解析器:) – vks
哦好吧謝謝!請再說一次。假設我需要檢索兩個學生的詳細信息,那麼我需要重複這個第二個名字的權利? – Deepa