2

数据应该是这样的:

Some junk data
More junk data 

1. fairly long key, all on one line
value: some other text with spaces and stuff

2. hey look! another long key. still on one line
value: a different value with some different information

每个文件有几个,通常在二十到三十之间。键值对的总数超过 20,000,这意味着手动更正每个文件是不可选择的。每个键前面的数字应该正确增加。值和以下键之间应该有一个换行符。每个值都应以字符串“value:”开头

现在,我逐行将每一行分类为键、值或垃圾。然后我从键中解析出数字并将数字、键和值存储在一个对象中。

当数据格式不正确时会出现问题。以下是我迄今为止遇到的一些问题:

  • 键和值之间没有换行符。
  • 键或值中间出现意外换行,导致程序将每个键或值的一部分视为垃圾数据。
  • “价值”一词拼写错误。

我通过计算每行前六个字符与主字符串“value:”之间的 Levenstein 距离来处理第三种情况。如何解决其他两个问题?

如果重要的话,解析是在 node.js 服务器上进行的,但是如果他们可以更轻松地处理这些不一致的数据,我愿意接受其他语言。

4

1 回答 1

0

看看这个:

正则表达式:^(\d+)\. ?(.+?)(?:value|vlaue|balue|valie): ?(.+?)[\n\r]{2,} 在这里解释演示:http ://regex101.com/r/gG0wH8

如果您修复了“拼写错误的值”问题,您可以将其简化为:否则在该 RegEx 部分中
^(\d+)\. ?(.+?)value: ?(.+?)[\n\r]{2,}添加尽可能多的拼写错误。|

为此,我迷上了:

  • 行必须以数字和带有可选空格的点开头
  • keyid是之后和之前的一切value
  • value在至少 2 个换行符后结束

您还应该删除正确的条目,然后重新检查文件以检查是否缺少其他任何内容。

于 2013-03-11T21:41:41.683 回答