【问题标题】:Finding text with multiple line in a file在文件中查找多行文本
【发布时间】:2019-08-28 17:36:22
【问题描述】:

我需要提取唯一索引的开始和结束圆括号之间的字段名称,这可以跨越 2 或 3 行或多行

这是文件的内容:

create index "informix".be_ach_detail_1_ix1 on "informix".be_ach_detail_1 (association,bank_number,batch_date) using btree ; 
create unique index "informix".bank_info_pk on "informix" .bank_info 
(merchant,bank_number,batch_date,sequence_number, association,transaction_code,ach_table) using btree ;  

预期输出:

(商户、银行号码、批次日期、序列号、关联、交易代码、ach_table)

我尝试了多个findall 选项,但都不起作用:

myfile=re.findall(r'unique index\s.*\S*\)',myfile)[0]
myfile=re.findall(r'unique index\s.*\S*\)',myfile)[0]

【问题讨论】:

    标签: python regex findall


    【解决方案1】:

    您可以使用pattern = r"unique index[^(]*\(([^)]*)\)",这意味着:

    • unique index 在文本中准确搜索该子字符串
    • [^(]* 匹配除( 之外的所有字符,这将是文本,直到括号以( 打开
    • \( 左括号(我们必须用反斜杠转义字符)
    • ([^)]*) 匹配除) 之外的所有字符的组,这将是文本,直到括号以) 结束
    • \) 右括号(我们必须用反斜杠转义字符)
    import re
    
    text = """create index "informix".be_ach_detail_1_ix1 on "informix".be_ach_detail_1 (association,bank_number,batch_date) using btree ; create unique index "informix".bank_info_pk on "informix" .bank_info (merchant,bank_number,batch_date,sequence_number, association,transaction_code,ach_table) using btree ;"""
    
    pattern = r"unique index[^(]*\(([^)]*)\)"
    print(re.findall(pattern, text))
    

    哪些打印:

    ['merchant,bank_number,batch_date,sequence_number, association,transaction_code,ach_table']
    

    【讨论】:

      猜你喜欢
      • 2022-11-27
      • 1970-01-01
      • 2017-02-28
      • 2011-08-11
      • 2018-03-28
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 2014-03-05
      相关资源
      最近更新 更多