解析不一致的数据

时间:2013-03-09 20:42:09

标签: javascript regex node.js parsing

这是数据的样子:

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服务器上进行的,但如果他们可以更容易地处理这些不一致的数据,我会对其他语言开放。

1 个答案:

答案 0 :(得分:0)

看看这个:

RegEx:^(\d+)\. ?(.+?)(?:value|vlaue|balue|valie): ?(.+?)[\n\r]{2,} 在此解释演示:http://regex101.com/r/gG0wH8

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

为此,我迷上了:

  • 行必须以数字和带可选空格的点
  • 开头
  • keyid之后和value
  • 之前的所有内容
  • value在至少2次换行后结束

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