2017-04-12 31 views
1

我無法找到我有的正則表達式問題的解決方案。這實際上是一種跟進質詢,這個帖子的: Find string between two substrings AND between string and the end of file查找文本中的所有實例,最後一個詞也應該開始用Python的正則表達式搜索

我已經創建了下面的示例文本(在我的應用程序中的文本是一個很多時間和多個文件等):

課程22/09/2010 1.早期工作Josephine,Jansen 22-09-2010 10:37:08 日期22/09/2010職責1.早期工作1.3在這裏可以有其他一些 相關的東西護士的干預措施記錄這是現在的第四個 說明。 6.2.1.3混亂:觀察。護士干預記錄 這是一個新的,再次注意到,我稱它爲筆記3.課程22/09/2010 1. 早期記錄這再次是一個筆記,我稱它爲筆記2. Apple: 0/less課程22/09/2010 3.夜間約瑟芬Jansen 22-09-2010 06:22:25日期22/09/2010課程3. Nightduty 1.3其他這裏 護士干預措施記錄6.2.1.3混亂:觀察。 Nursegoals干預記錄課程22/09/2010 3. Nightduty記錄 這是一個新的筆記,我把它叫做注1

現在我想從解析本文的具體信息。我的興趣是'記錄',因此是記錄背後的文本部分。和具體記錄的日期,白日期我的意思是像02-11-2010這樣的日期以及早期關稅,晚班關稅或夜間關稅的概念(所以日期將是:'02-09-2010 1.早期關稅' )。我遇到的問題是文件中沒有真正的一致性,所以有時候一個日期有兩個音符,其他時間只有一個。另外有時候,註釋部分包含文本,而其他時間則不包含。

我知道如何解析記錄部分,但我不知道如何解析首先日期然後註釋部分(S)。所以我儘管把問題分成兩部分。我的第一步是,將整個文件分成單獨的日期部分。第二步:遍歷所有日期部分以獲取特定日期部分的註釋(帶有正則表達式)。然後我會創建一個包含特定日期的列表(如果我只想要特定的日期,例如將它放在列單元格中,我會簡單地解析該日期部分的前13個字符)。 (s)與該日期有關。例如:

名單= [2010年2月8日1.早期的責任,[注1,注2],2010年2月8日2晚的職責,[注1],等等]

讓我們只專注於日期解析,所以我的問題是明確的。我用下面的代碼:

date = r'Course\s+(.*?)(?:Course|$)' 
date_list = re.findall(date, text, re.DOTALL) 
for i in date_list: 
    print (i) 
    print ('XXX') 

的輸出是:

22/09/2010 1.早期佔空比約瑟芬,詹森22-09-2010 10時37分08秒 Date22/09/2010年的責任1.早期關稅1.3在這裏可以有一些其他的 相關的東西護士的干預措施記錄這是現在的第四個 說明。 6.2.1.3混亂:觀察。護士干預記錄 這是一個新的,再次注意到,我稱之爲注3. XXX 22/09/2010 3. Nightduty約瑟芬,Jansen 22-09-2010 06:22:25日期22/09/2010 XXX 22/09/2010 3.夜間記錄這是一個新的筆記,我稱它爲筆記1。 XXX

該輸出射門以下元素:

['課程22/09/2010 1.早期佔空比記錄這又是一個說明,我打電話 它注2蘋果:0 /更少 ']

[' 3。 Nightduty 1.3此處的其他內容護士干預措施記錄 6.2.1.3混亂:觀察。 Nursegoals干預課程‘ALS作爲一個新的開始這麼說來匹配]

所以,我認爲正則表達式利己考慮單詞的結尾有點跳了’。

這真的是巨大的,如果有人可以幫助我:)也許我缺少的東西..

回答

2

更改非捕獲組來積極前瞻:

r'Course\s+(.*?)(?=Course|$)' 
       ^^ 

regex demo。展開的更快的變體是r'Course\s+([^C]*(?:C(?!ourse)[^C]*)*)'(參見demo)。

否則,重疊的子串不會匹配。

Python demo

import re 
rx = r"Course\s+(.*?)(?=Course|$)" 
s = "Course 22/09/2010 1. Early duty Josephine, Jansen 22-09-2010 10:37:08 Date 22/09/2010 Duty 1. Early duty 1.3 Here there can be some other related stuff Nursegoals Interventions Record This is now the fourth note. 6.2.1.3 Confusion: Observing. Nursegoals Interventions Record This is a new, note (again), i call it note 3. Course 22/09/2010 1. Early duty Record This is again a note, i call it note 2. Apple: 0/less Course 22/09/2010 3. Nightduty Josephine, Jansen 22-09-2010 06:22:25 Date 22/09/2010 Course 3. Nightduty 1.3 Something else here Nursegoals Interventions Record 6.2.1.3 Confusion: Observing. Nursegoals Interventions Record Course 22/09/2010 3. Nightduty Record This is a new note, i call it note 1." 
results = re.findall(rx, s, re.DOTALL) 
for x in results: 
    print(x) 

輸出:

22/09/2010 1. Early duty Josephine, Jansen 22-09-2010 10:37:08 Date 22/09/2010 Duty 1. Early duty 1.3 Here there can be some other related stuff Nursegoals Interventions Record This is now the fourth note. 6.2.1.3 Confusion: Observing. Nursegoals Interventions Record This is a new, note (again), i call it note 3. 
22/09/2010 1. Early duty Record This is again a note, i call it note 2. Apple: 0/less 
22/09/2010 3. Nightduty Josephine, Jansen 22-09-2010 06:22:25 Date 22/09/2010 
3. Nightduty 1.3 Something else here Nursegoals Interventions Record 6.2.1.3 Confusion: Observing. Nursegoals Interventions Record 
22/09/2010 3. Nightduty Record This is a new note, i call it note 1. 
+0

這就是我一直在尋找!尤其是用正則表達式演示(我不知道)。非常感謝:) – jjn

+1

很高興爲你工作。如果我的回答對你有幫助,請考慮upvoting(參見[如何在堆棧溢出?](http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)) 。 –

相關問題