1

我有以下要解析的字符串:

字段 1:值 1
覆盖字段 2:
        价值 2.1
        价值 2.2
字段 3:
        价值 3
覆盖字段 4:值 4
字段 5:值 5

基本上,字段值对由冒号分隔,并且字段(并不总是以“Field ...”开头)从新行开始,后跟冒号。我想提取被覆盖的字段值对,所以我可以有两个(或多个)字符串:一个作为“覆盖字段 2:...值 2.2”,一个作为“覆盖字段 4:值 4”。

我不知道有多少覆盖字段,但它们都以“覆盖”开头。我不确定分组是否有帮助。

我能想到的最好的方法是使用 re.findAll() 搜索“Overriden[^:] :[^:] :?”的出现,所以我会得到两个结果:

  • 覆盖字段 2:...字段 3:
  • 覆盖字段 4:...字段 5:

然后我将不得不砍掉最后一部分“\n[^:]*:”。这看起来并不聪明。

有人想给点建议吗?

4

1 回答 1

0

你也许可以使用这样的东西:

\s*([^:]+)\s*:\s*((?:[^:](?![^:\n]+:))+)\s*

[我\s*只是为了避免尾随空格和/或换行符,它们可以在不更改核心内容的情况下删除]。

正则表达式101演示

正则表达式开始为:

([^:]+):([^:]+)

然后我将第二部分更改为((?:[^:](?![^:\n]+:))+)确保在同一行上没有 a :(这意味着它将进入一个值顶部的字段)。

于 2013-09-24T06:30:52.347 回答