【问题标题】:matching and splitting匹配和拆分
【发布时间】:2020-06-25 05:44:03
【问题描述】:

我有一个包含内容的文件 1:

abc_1 (qst_0) bndk
cgn32 (mn_r_1) mncp
 dmj_2 (yst) pr1f

我想逐行匹配和分割文件。我使用以下代码:

path = sys.argv[1]
 with open(path) as f:
  data = f.read()
 unit = re.split(r"(.+\(.*\).+)", data)
 print(*unit)

它能够拆分前 2 行,但在第 3 行它给出了一个错误提示 IndentationError:file1 第 3 行的意外缩进。有人能帮帮我吗?

【问题讨论】:

  • 这是什么类型的文件?您正在加载的文本文件,例如with open(...) ?
  • 是的,它是一个文本文件
  • 我无法更改文件
  • 如何更改我的正则表达式以匹配两种模式
  • @abcd,你是如何在 python 中加载文本文件的?你能包括那个吗

标签: python python-3.x regex split


【解决方案1】:

你可以试试这个:

with open(path) as f:
    data = f.read()
unit = [line.strip().split(" ") for line in data.split("\n")]
print(unit)

输出:

[['abc_1', '(qst_0)', 'bndk'],
 ['cgn32', '(mn_r_1)', 'mncp'],
 ['dmj_2', '(yst)', 'pr1f']]

【讨论】:

    【解决方案2】:

    什么是缩进错误?

    • python 中的缩进错误是指关于空格的错误语法。

    在第 3 行 data=f.read() 您没有正确遵循语法。因此,在这种情况下,您的代码甚至没有执行输入文件中的任何一行。

    使用 python 时,请确保一个块中有 4 个空格。以下应该可以工作。

    import re
    import sys
    
    path = sys.argv[1]
    
    with open(path) as fp:
        for line in fp:
            print (re.split(r"(.+\(.*\).+)", line))
    

    (或)

    import re
    import sys
    
    path = sys.argv[1]
    
    with open(path) as fp:
        split_lines = [re.split(r"(.+\(.*\).+)", line) for line in fp]
    
    print(split_lines)    
    

    注意:

    • 您没有提到要根据什么分割线。是空格、“_”还是“)”?
    • 您当前的正则表达式不这样做。

    【讨论】:

    • 缩进错误据说是文件而不是代码
    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多