我是一個Python(和正則表達式)新手,在統計軟件包之外的編程經驗相對較少(SAS & Stata)。到目前爲止,我已經通過使用Python教程並解答了有關stackoverflow的其他問題,但我被卡住了。我在Mac OS X上運行Python 3.4。我的re.sub語句掛起了
我寫了一個腳本,下載和解析SEC文件。該腳本有四個主要步驟:
- 打開URL和內容裝載使用BeautifulSoup
- 刪除其他編碼與正則表達式語句的字符串變量
- 刪除HTML編碼(如JPG定義,嵌入式zip文件,等等)
- 保存生成的文本文件。
我的目標是在保存到我的本地驅動器之前從每個文件中刪除儘可能多的「非文本」信息。我寫了另一個腳本,在其中對剩餘文本進行實際分析。
我遇到了至少一個備案第3步的問題。引起該掛斷的行是:
_content1 = re.sub(r'(?i).*\.+(xls|xlsx|pdf|zip|jpg|gif|xml)+?[\d\D]+?(end)',r'',_content1)
其中_content
是包含SEC文件的內容的字符串變量。正則表達式應該用一個以文件擴展名(xls,pdf等)結尾的行開始,以「end」結尾。
上面的代碼在整個年度的申報工作中工作得很好(即我已經分析了2001年和2002年的所有問題),但是我的腳本在2013年被掛上了一個特定的申請(http://www.sec.gov/Archives/edgar/data/918160/0000918160-13-000024.txt)。我不確定如何調試,因爲我沒有收到任何錯誤消息。該腳本只是掛在這一行代碼上(我已經用前後的print語句驗證了這一點)。有趣的是,如果我用這個替換上面的代碼行:
_content1 = re.sub(r'(?i)begin*.*(xls|xlsx|pdf|zip|jpg|gif|xml)+?[\d\D]+?(end)',r'',_content1)
然後一切工作正常。不幸的是,文件中的某些嵌入式文件不是以「開始」(如zip文件)開頭的,所以它不適用於我。
我希望有一位駐地專家可以在我的正則表達式替換語句中識別出會導致問題的事情,因爲通過連接的SEC文件進行逐匹配可能不可行(至少我不會這樣做)不知道從哪裏開始)。任何幫助是極大的讚賞。
感謝, JRM
編輯:
我能得到我的腳本中使用以下正則表達式的工作:
_content1 = re.sub(r'(?i)begin|\n+?.+?(xls|xlsx|pdf|zip|jpg|gif|xml)+?[\d\D]+?(end)',r'\n',_content1)
這似乎是完成我想要的,但我我仍然很好奇,爲什麼如果有人有解決方案,原創不起作用。
雖然我將'[^ ,. \ n]'切換到'。+'就像你所建議的,因爲我已經去掉了所有的HTML標籤,這確實奏效。雖然這並不完美。出於某種原因,以「begin 644 a2012form10-k_chart.jpg」開頭的鏈接文件中的jpg塊不會被替換。所有其他人都這樣做。它似乎應該捕獲(並在pythex.org上測試正則表達式時)。但是,至少該文件會處理,所以我對解決方案感到滿意。謝謝! –