2012-12-26 98 views
0

我需要解析一个字符串并从中读取一个特定的子字符串。我需要解析的字符串如下:阅读python中的多行字符串

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

domain 
(
    (device 
      (vfb 
       (xxxxxx) 
       (location : 5903) 
     ) 
    ) 
) 

这只是一个示例字符串。实际的字符串可能包含很多这样的子字符串。 我需要从“vfb”子字符串中获取位置字段的值。我试过的findAll和搜索功能如下

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

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

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

+1

之间存在'(device'和'(vfb'您忽略,同样的后一个换行符 –

+0

虽然这种格式是可怕的。 “正确”的解决方案是为它编写一个解析器,也许把它翻译成一些不太专门的东西,比如JSON。 – tripleee

回答

1

为什么不只是寻找location键值对?

>>> re.findall(r'(\w+) : (\w+)', s) 
    [('location', '5903')] 
+0

因为可能有多个子字符串有位置,但是我想要一个在“vfb”sunheading – tekken

0

简单的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() 
0
re.findall(r'device.*?\(vfb.*\(.*\).*(\(.*?\))', s, re.DOTALL) 
+0

下的这个,好像是最简单的方法,但不幸的是,这并没有似乎不是正确的正则表达式。 我试图修改它,但它仍然不起作用 – tekken

+0

但我运行得很好,我的Python是2.7! – 09dzxue