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

按顺序组合使用正则表达式创建的三个列表-Python,python,list,expression,Python,List,Expression,我有一个文本文件,我正在阅读三个正则表达式。我想逐行合并每个正则表达式搜索中的每个项目,并使用与下面最后一行相同的格式打印出来。我就是不能让循环正确地组合所有东西 来自三个不同来源的示例文本(您可以看到信息有时缺失,有时以不同格式呈现: 债券名称O/F C/F Cpn MTR FICO CAL WALB 1mCPR 60+CE CWL 2004-6 2A5 0.95 0.09升+39 4 49 200 4 28.62 47.69% 债券名称O/F C/F Cpn FICO CAL WALB 60

我有一个文本文件,我正在阅读三个正则表达式。我想逐行合并每个正则表达式搜索中的每个项目,并使用与下面最后一行相同的格式打印出来。我就是不能让循环正确地组合所有东西

来自三个不同来源的示例文本(您可以看到信息有时缺失,有时以不同格式呈现:

  • 债券名称O/F C/F Cpn MTR FICO CAL WALB 1mCPR 60+CE CWL 2004-6 2A5 0.95 0.09升+39 4 49 200 4 28.62 47.69%

  • 债券名称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

  • 类型CUSIP债券名称定期报价结构 优质17312KAB8 CMSI 07-5 1A2 7/7 92.50 LCF

  • 您可以使用或:

    根据文件的格式,该模块可能也会有所帮助(而不是使用正则表达式来提取内容)


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

    如果所有这些列表的长度相同,您可以连接每个相应的条目(用空格分隔)以创建组合字符串的列表,然后连接它们(用换行分隔)创建显示的结果列表。我决定使用一些列表理解向导(不适用于循环!)

    希望这能满足你的需要。如果不能,我相信这个问题会有其他几种解释:)


    编辑:我知道它有点长,但是你可以缩短变量名。或者(或者,除此之外),您可以在理解之前定义zip(cusip_结果、bond_名称_结果、bond_价格_结果)。不过我还是忍不住要做这些事情,我喜欢热辣的python一行

    +1,我试图用列表理解来实现它,但它不起作用:grouse::grumble:用列表comp:)完全可行@Reno我知道,这就是为什么它如此令人恼火:^ \整个程序可能可以用不到5行的代码来表达,没有正则表达式。是否要共享输入文件格式?不确定我是否理解“输入文件格式?”这来自粘贴到文本文件的电子邮件。我希望它是一个电子邮件读取并保存为文本文件,但我仍然在想这个问题。是的,只要发布cusip.txt的前几行,如果它不是敏感数据。查看示例输入,看起来您的记录在输出时会变得不同步,因为不是每个记录都有一个cusip\u reg\u exp匹配。我担心这可能会发生…@dadashek如果其中一个回答回答了你的问题,如果你能接受就好了:)+1这就是我试图做的,但我的大脑功能不正常:^}
    import re
    
    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[A-Z]{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)
    
    print(cusip_result[0],bond_name_result[0],bond_price_result[0])
    
    for i, j, k in zip(cusip_result, bond_name_result, bond_price_result):
        print i, j, k
    
    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)])