【发布时间】:2015-02-12 03:33:28
【问题描述】:
考虑以下多行字符串:
This is multiline text that needs to be correctly parsed into key-value pairs, excluding all other information.
Section One:
First key = Value One
Second key = Value Two
Section Two:
Third key = Value Three
Fourth key = Value Four
Fifth key = Value Five
Section Three:
Sixth key = Value Six
Seventh key = Value Seven
Eighth key = Value Eight
换句话说,文本由“介绍”(一些短语)组成,后面是多行,按部分组织,每个部分都有一个“标题”(例如,Section One)和多个键值对,以= 分隔。
键可以包含除换行符和= 之外的任何字符,值可以包含除换行符之外的任何字符。
有时,文本中可能会出现其他不相关的行。
需要一个正则表达式,它会导致matched.find() 返回所有键值对组,并且只返回那些,跳过介绍和节标题,以及任何其他没有键值对的行。
理想情况下,不需要其他文本预处理或后处理。
逐行读取文本并进行相应处理在此用例中不是一个选项。
(?:\r|\n)(\s*[^=\.]+)\s*=\s*(.+) 之类的模式非常接近,但它们仍然包含更多要求。
有什么想法吗?
【问题讨论】:
-
如果间距不变,也可以试试
(?m)(?<=^ {4}).+?(?= *= *(.*)) -
间距不固定,不起作用。不过谢谢。 :-)
-
您能否详细说明逐行阅读文本并进行相应处理不是此用例中的选项。 ?
标签: java regex key-value matcher keyvaluepair