2013-03-09 78 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