2017-04-01 42 views
-1

我正在開發一個自動化項目,該項目涉及使用解析txt文件的python腳本,並重復提取關鍵字後面的3行數據。爲了給出上下文,txt文件包含數百個形式字母,除了名稱和地址以外,它們是相同的。我的最終目標是遍歷所有這些表單信件,並提取姓名和地址,並使用openpyxl將它們放入Excel電子表格中。下面是TXT文件是什麼樣子的例子...使用Python正則表達式自動化文本提取

Dear Sir, 

Body of letter that is the same for all of the letters. Etc. 

Sincerely, 

Mr. John Smith 
123 Any Street 
Anytown, USA 11111 

Dear Sir, 

Body of letter that is the same for all of the letters. Etc. 

Sincerely, 

[Ms.] [Jane] [Doe] 
[456 Some Lane] 
[Sometown, USA 22222] 

等(這些信去和與需要提取不同的名稱)


我的問題是如何在Python中使用正則表達式來設置「最後一個關鍵字」(在這個特定的一批字母「真誠」,但可以改爲somethi ng),並提交到上面顯示的每個括號內的項目(括號對應於最終的Excel列,如後綴,名字,姓氏,地址,城鎮),並逐步遍歷數百個字母中的每一個?一般來說,使用正則表達式還是使用python很簡單?我認爲我可以設法做到這一封信,但我堅持如何轉向下一封信的下一個關鍵字。如果任何人有任何想法是什麼將是最有效的方法來解決這個問題,我將不勝感激!另外,我知道這是發佈我的初始方法到問題的服裝,但是對於正則表達式操作完全不熟悉,我的嘗試甚至沒有接近。另外,讓我知道如果我正在做一些非正統的Stack Overflow問題,因爲我在這裏是新手。


例輸入:字母input.txt中
電子郵件收到17年3月30日:

Dear Sir, 

I would be delighted to be placed on your mailing list. Please keep up the great work! 

Sincerely, 

Mr. Thomas Dahlmer 
46 Alpine Street 
Evanston, Il 60201 

電子郵件收到17年3月30日:

親愛的主席先生,

我很高興能夠列入您的郵件列表。請繼續保持好的工作!

真誠,

羅伯特·諾蘭先生
1104麥迪遜大道
紐約,NY 10021

電子郵件收到17年3月30日:

Dear Sir, 

I would be delighted to be placed on your mailing list. Please keep up the great work! 

Sincerely, 

Ms. Angela Carraway <br/> 
402 Arlington Drive <br/> 
Concord, MA 01742 

例如輸出
lettersoutput。TXT

Mr. Thomas Dahlmer <br/> 
46 Alpine Street <br/> 
Evanston, Il 60201 

Mr. Robert Nolan <br/> 
1104 Madison Avenue <br/> 
New York, NY 10021 

Ms. Angela Carraway <br/> 
402 Arlington Drive <br/> 
Concord, MA 01742 
+0

你想要一個正則表達式來捕獲這些嗎?如果是這樣,請給出一個示例輸入和所需的輸出,所以我可以提供一個經過測試的正則表達式。 – ferit

+0

@Saibot本質上,是的。我編輯了我的問題,以包含兩個txt文件中的示例輸入和輸出內容。感謝您對此有任何洞察力,您可以提供! –

回答

0

它有點長:Sincerely,[\s\n]+([\w\.]+)\s+(\w+)\s+(\w+)[\s\n]+(\d+\s\w+\s\w+)[\s\n]+(\w+\s?\w+,\s\w+\s\d+)

它捕獲爲5組:標題,名字,姓氏,地址1,地址

演示:https://regex101.com/r/kkNWWB/3

有五個括號和每個parantesis代表一個捕獲組:

([\w\.]+)匹配並捕獲第一組:標題

(\w+)比賽和捕獲第二組:姓

(\w+)比賽和捕獲第三組:名字

(\d+\s\w+\s\w+)比賽和捕獲第四組:地址1

(\w+\s?\w+,\s\w+\s\d+)比賽和捕獲第五組:地址2

其餘的正則表達式只填補了捕獲組之間的差距,它們只匹配但不捕獲。

+1

就是這樣!我無法感謝你的幫助。我一定會學習演示,從您的專業知識中學習,並瞭解每個部分的含義。正則表達式肯定是一個強大的工具! –

+0

享受! :)如果你想學習,我也可以解釋表達。 – ferit

+0

是的,那太棒了!我的理解是,這些信函操作員在捕捉文本方面各有自己的作用,但他們如何共同努力才能找到您找到的最終結果? –