Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中读取多行字符串_Python - Fatal编程技术网

在python中读取多行字符串

在python中读取多行字符串,python,Python,我需要解析一个字符串并从中读取特定的子字符串。我需要解析的字符串如下所示: domain ( (device (console (xxxxxx) (XXXXXX) ) ) ) domain ( (device (vfb (xxxxxx) (location : 5903)

我需要解析一个字符串并从中读取特定的子字符串。我需要解析的字符串如下所示:

domain
(
    (device
          (console
               (xxxxxx)
               (XXXXXX)
          )
    )
)

domain
(
    (device
          (vfb
               (xxxxxx)
               (location : 5903)
          )
    )
)
这只是一个示例字符串。实际字符串可能包含许多这样的子字符串。 我需要从“vfb”子字符串中获取location字段的值。我尝试了findall和search函数,如下所示

import re
text=re.search('(device(vfb(.*?)))',stringname)

但我总是得到空字符串。
有没有一个简单的方法可以做到这一点?谢谢

为什么不直接查找
位置
键值对呢

>>> re.findall(r'(\w+) : (\w+)', s)
    [('location', '5903')]
简单python脚本:

fp = open("input.txt", "r")

data = fp.readlines()
for line in data:

    if "location" in line:
        print line.split(":")[1].split(")")[0].strip()

fp.close()

(设备
(vfb
)之间有一条新行,您将忽略它,后面也是一样。虽然这种格式很可怕,但“右”解决方案是为它编写一个解析器,并可能将它转换为一些不太特别的东西,如JSON。这似乎是最简单的方法。但不幸的是,这似乎不是正确的正则表达式。我试图修改它,但仍然不起作用,但我运行得很好,我的python是2.7!因为可能有多个子字符串但我要在“vfb”标题下的那个
fp = open("input.txt", "r")

data = fp.readlines()
for line in data:

    if "location" in line:
        print line.split(":")[1].split(")")[0].strip()

fp.close()
re.findall(r'device.*?\(vfb.*\(.*\).*(\(.*?\))', s, re.DOTALL)