这是我要解析的完整字符串:
Response
--------
{
Return Code: 1
Key : <None>
Files : [
{
Return Code: 0
Data : 'Value' is 1
'Value' is two
This is third line of output
}
]
}
这就是我想要解析的文本的样子:
'Value' is 1
'Value' is two
This is third line of output
我曾尝试弄乱re.findall()
,但我无法得到我想要的东西
这是一个python脚本,它试图使用正则表达式进行解析..
import subprocess,re
output = subprocess.check_output(['staf', 'server.com', 'PROCESS', 'START', 'SHELL', 'COMMAND', "'uname'", 'WAIT', 'RETURNSTDOUT', 'STDERRTOSTDOUT'])
result = re.findall(r'Data\s+:\s+(.*)', output, re.DOTALL)[0]
print result
脚本输出..
[root@server ~]# python test.py
''uname'' is not recognized as an internal or external command,
operable program or batch file.
}
]
}
答案 0 :(得分:0)
选项1
如果您想要Data:
之后的三行,您可以执行以下操作,将三行捕获到第1组:
match = re.search(r"Data\s*:\s*((?:[^\n]*[\r\n]+){3})", subject)
if match:
result = match.group(1)
选项2
如果您希望第一行之前Data:
之后的所有行都有}
,请将正则表达式更改为:
Data\s*:\s*((?:[^\n]*(?:[\r\n]+(?!\s*}))?)+)
答案 1 :(得分:0)
使用以下正则表达式,您将找到所需的三个字符串。
请注意,这在很大程度上取决于响应的格式化方式。
>>> import re
>>> response = """
Response
--------
{
Return Code: 1
Key : <None>
Files : [
{
Return Code: 0
Data : 'Value' is 1
'Value' is two
This is third line of output
}
]
}"""
>>> re.findall(r"('Value'.*)\n(.*)\n(.*)\n.*}",response)
[("'Value' is 1", "'Value' is two", 'This is third line of output')]
您还可以在组中包含换行符,如下所示:
>>> re.findall(r"('Value'.*\n)(.*\n)(.*\n).*}",response)
[("'Value' is 1\n", "'Value' is two\n", 'This is third line of output\n')]
取决于您之后如何处理它。
<强>更新强>
这个怎么样?
>>> re.findall(r"Data\s*:\s*(.*?)}",response,re.DOTALL)
["'Value' is 1\n'Value' is two\nThis is third line of output\n "]
这将从第一个&#39; Value&#39;中找到所有内容。直到第一个&#39;}&#39;。