2011-08-19 49 views
0

我有一個文本文件,我正在閱讀三個正則表達式。我想將每個正則表達式搜索中的每個項目逐行組合,並使用與下面最後一行相同的格式將其打印出來。我只是無法把循環權結合在一起。按順序組合使用正則表達式創建的三個列表 - Python

從三個不同的來源(你可以看到信息有時失蹤,以不同的格式呈現的其他時間

示例文字:

  1. 債券名稱O/FC/F衣原體地鐵FICO CAL WALB 1mCPR 60+ CE CWL 2004-6 2A5 0.95 0.09 L + 39 4 49 200 4 28.62 47.69%

  2. 債券名稱O/FC/F衣原體FICO CAL WALB 60+說明提供 CSMC 6月9日7A1 25.00 12.01 L + 45 727 26 577 33.29 FLT,AS,0.0%50-00

  3. 類型CUSIP債券名稱期限結構要約PRIME 17312KAB8 CMSI 7月5日1A2 7/7 92.50 LCF

    進口重新

    字符串=打開( 「cusip.txt」) read_string = string.read()

    cusip_reg_exp = re.compile( '\ S [0-9] {3} [A-ZA-Z0-9] {6} \ S') cusip_result = cusip_reg_exp.findall(read_string)

    bond_name_reg_exp = re.compile('\ s [AZ] {3,5} \ s [0-9] {4} \ D {1,3} \ S {1,3} \ s {1,2} \ w {1,3}') bond_name_result = bond_name_reg_exp.findall(read_string)

    bond_price_name_reg_ex = re.compile('[$] {0,1} [0-9] {1,2} [ - ] {1} [0-9] { 2}「) bond_price_result = bond_price_name_reg_ex.findall(read_string)

    打印(cusip_result [0],bond_name_result [0],bond_price_result [0])

+0

整個程序大概可以用5行表示,沒有正則表達式。小心分享輸入文件格式? – Triptych

+0

不知道我明白「輸入文件格式?」這來自粘貼到文本文件的電子郵件。我希望它是一個電子郵件閱讀和保存爲文本文件,但我仍然認爲這一個。 –

+0

是的,只是發佈cusip.txt的前幾行,如果它不是敏感數據。 – Triptych

回答

1

可以使用zip[docs]itertools.izip[docs]

for i, j, k in zip(cusip_result, bond_name_result, bond_price_result): 
    print i, j, k 

根據文件的格式,csv[docs]模塊也可能會有所幫助(而不是使用正則表達式來提取內容)。

您也可以迭代每一行並提取每行的相關信息。

+0

+1,我試圖做一個列表理解,它不是工作:松雞::發牢騷: –

+0

這是完全可以與列表comp :) :) – Reno

+0

@Reno我知道,這是什麼讓它如此惱人:^ \ –

1

如果所有這些列表的長度都是相同的,則可以連接每個對應條目(用空格分隔)以創建組合字符串的列表,然後連接這些列表(用換行符分隔)以創建顯示結果列表。我決定用一些列表理解魔法來做(不適用於循環!)。

print '\n'.join([' '.join([cusip_item, bond_name_item, bond_price_item]) for (cusip_item, bond_name_item, bond_price_item) in zip(cusip_result, bond_name_result, bond_price_result)]) 

希望能滿足您的需求。如果不是這樣,我肯定會有這個問題的其他解釋:)

編輯:我意識到這有點長,但你可能會縮短變量名稱。或者(或者另外),你可以在理解之前定義zip(cusip_result,bond_name_result,bond_price_result)。雖然我不能幫助自己,但我喜歡熱Python的一個內襯!

+1

+1這就是我想要做的,但我的大腦不能正常工作:^} –