顺序组合使用正则表达式创建的三个列表 - Python

时间:2011-08-19 21:01:39

标签: python list expression

我有一个正在阅读的文本文件,其中包含三个正则表达式。我想逐行组合每个正则表达式搜索中的每个项目,并使用与下面最后一行相同的格式打印出来。我只是无法让循环正确地结合一切。

来自三个不同来源的示例文本(您可以看到信息有时会丢失,其他时间会以不同的格式显示:

  1. 债券名称O / F C / F Cpn MTR 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 / F C / F Cpn FICO CAL WALB 60+票据优惠 CSMC 06-9 7A1 25.00 12.01 L + 45 727 26 577 33.29 FLT,AS,0.0%50-00

  3. 键入CUSIP债券名称期限要约结构 PRIME 17312KAB8 CMSI 07-5 1A2 7/7 92.50 LCF

    导入重新

    string = open(“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])

2 个答案:

答案 0 :(得分: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]模块也可能有用(而不是使用正则表达式来提取内容)。

您还可以遍历每一行并提取每行的相关信息。

答案 1 :(得分:1)

如果所有这些列表的长度相同,则可以连接每个相应的条目(由空格分隔)以创建组合字符串的列表,然后连接它们(由换行符分隔)以创建显示的列表结果我决定用一些列表理解魔法来做(没有for循环!)。

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)。我只是不能帮助自己这些东西,我喜欢热蟒蛇一个衬垫!