如何使用 python 以干净的方式解析多行?

how to parse multi-line in a clean way using python?

作为我必须从票证中解析的内容类型的示例:

Name:
snakeoil
Host:
foobar

{block}
  email: some data here
  url: http://foo
  date: 01/02/16
{block}

我可以识别 'key',这是通常以冒号结尾的任何单词

我可以使用正则表达式模块进行匹配,例如 ^\w$ 以提取密钥,但我必须处理值在同一行和后续行中的两种情况。

必须提取下一行中的单词是我想不出如何干净利落地解决的问题 and/or。

如果格式正确,您仍然可以使用正则表达式,

>>> re.findall('(.*?):\n(.*)$', content, re.MULTILINE)
[('Name', 'snakeoil'), ('Host', 'foobar')]

如果您也需要 emailurldate

>>> re.findall('\s*(.*?):[\n\s]?(.*)$', s, re.MULTILINE)
[('Name', 'snakeoil'), ('Host', 'foobar'), ('email', 'some data here'), ('url', 'http://foo'), ('date', '01/02/16')]

如果不行,@QiangJin 解决的很好