在没有正则表达式的情况下获取多行数据

时间:2019-04-20 20:21:32

标签: python brackets

我正在尝试以以下格式解析go图元文件:

require (
    github.com/cheggaaa/pb v1.0.28
    github.com/coreos/go-semver v0.2.0 // indirect
    github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e // indirect
    github.com/dustin/go-humanize v1.0.0
    github.com/fatih/color v1.7.0
        ...
        )

如何使用正则表达式获取括号和 之间的数据? (否则,这个毫无疑问的问题将根本不存在)。我曾经尝试过与split()一起玩,但是到目前为止失败了。

3 个答案:

答案 0 :(得分:1)

如果图元文件的格式类似于您的示例,则

@rdas的建议[l.strip() for l in file.readlines()[1:-1]]将起作用。但实际上,您应该只使用正则表达式。更简单。

答案 1 :(得分:0)

您可以阅读全部内容,将其分成几行,然后切开第一行和最后一行:

with open(metafile) as f:
    requirements = f.read().splitlines()[1:-1]

使用with打开文件可确保在作用域结束时正确关闭文件。

答案 2 :(得分:0)

这是应该执行的代码。只要这些块中没有其他“)”,它将复制“ requiere(”和“)”之间的所有行。

数据文件:

random stuff
require (
    github.com/cheggaaa/pb v1.0.28
    github.com/coreos/go-semver v0.2.0 // indirect
    github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e //indirect
    github.com/dustin/go-humanize v1.0.0
    github.com/fatih/color v1.7.0
        ...
        )



random stuff

输出文件:

github.com/cheggaaa/pb v1.0.28
github.com/coreos/go-semver v0.2.0 // indirect
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e //indirect
github.com/dustin/go-humanize v1.0.0
github.com/fatih/color v1.7.0
    ...

代码:

f = open('data', 'r')
f2 = open('out', 'w')

toggle = False

for line in f:
    if 'require (' in line:
        toggle = True
        continue
    if toggle:
        if ')' in line:
            toggle = False
        else:
            f2.write(line)

f.close()
f2.close()