2013-03-09 76 views
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服务器上,但如果他们可以更轻松地处理这些不一致的数据,我可以接受其他语言。

回答

0

看看这个:

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

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

对于这个工作,我迷上了:

  • 行必须以数字(S)和一个可选的空间点
  • keyid后一切,之前value
  • value在至少2个换行符后结束

您还应该删除正确的条目,然后重新审查该文件检查是否还有其他东西丢失。

+0

This Works,thanks!我猜“价值”的拼写很难得,每当它出现时我都有能力改变它。 – arknave 2013-03-12 21:48:44