如何使用 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')]
如果您也需要 email
、url
和 date
:
>>> re.findall('\s*(.*?):[\n\s]?(.*)$', s, re.MULTILINE)
[('Name', 'snakeoil'), ('Host', 'foobar'), ('email', 'some data here'), ('url', 'http://foo'), ('date', '01/02/16')]
如果不行,@QiangJin 解决的很好
作为我必须从票证中解析的内容类型的示例:
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')]
如果您也需要 email
、url
和 date
:
>>> re.findall('\s*(.*?):[\n\s]?(.*)$', s, re.MULTILINE)
[('Name', 'snakeoil'), ('Host', 'foobar'), ('email', 'some data here'), ('url', 'http://foo'), ('date', '01/02/16')]
如果不行,@QiangJin 解决的很好