2015-11-16 44 views
0

我目前正在嘗試開發一種軟​​件,以正確地查看以.txt格式(通過電子郵件發送)保存的WhatsApp消息,並試圖製作解析器。 我在過去的3個小時裏嘗試使用正則表達式,還沒有找到解決方案,因爲我之前幾乎沒有使用Regex。正則表達式聊天消息檢測

的消息是這樣的:

16.08.2015, 18:30 - Person 1: Some multiline text here 
still in the message 
16.08.2015, 18:31 - Person 2: some other message which could be multiline 
16.08.2015, 18:33 - Person 1: once again 

我想他們用正則表達式 (像這樣)

List<string> messages = new List<string>(); 
messages = Regex.Matches(parseable, @"REGEXHERE").Cast<Match>().Select(m => m.Value).ToList(); 

匹配正常分裂,他們最終像這樣

messages[0]="16.08.2015, 18:30 - Person 1: Some multiline text here\nstill in the message"; 
messages[1]="16.08.2015, 18:31 - Person 2: some other message which could be multiline"; 
messages[2]="16.08.2015, 18:33 - Person 1: once again"; 

我一直在嘗試用真正凌亂的正則表達式, e \d\d\\.\d\d\\. [...]

+0

什麼是你的正則表達式?請張貼一個。你只需要提取'16.08.2015,18:30','16.08.2015,18:31','16.08.2015,18:33'嗎? –

+0

請編輯你的問題,因爲它不清楚你想如何解析你的消息以及你卡在哪裏。 –

+0

*「我正在嘗試將它們分開」*您認爲什麼是「正確的」?你得到的輸出有什麼問題?你想要什麼輸出? –

回答

0

我不會爲此使用一個RegEx。相反,我只是使用StreadReaderStreamReader;你必須檢查當前的處理行是否是「聊天開始」行(使用RegEx),如果是,請檢查以下任何行是否不是「聊天開始」行,記錄是否應該是附加或產生新的一行。我寫了一個快速的擴展方法來證明這一點:

public static class ChatReader 
{ 
    static string pattern = @"\d\d\.\d\d\.\d\d\d\d, \d\d:\d\d - .*?:";   
    static Regex rgx = new Regex(pattern); 
    static string prevLine = ""; 
    static string currLine = ""; 

    public static IEnumerable<string> ReadChatMessages(this TextReader reader) 
    { 
     prevLine = reader.ReadLine(); 
     currLine = reader.ReadLine(); 

     bool isPrevChatMsg = rgx.IsMatch(prevLine);     

     while (currLine != null) 
     { 
      bool isCurrChatMsg = rgx.IsMatch(currLine); 
      if (isPrevChatMsg && isCurrChatMsg) 
      { 
       yield return prevLine; 
       prevLine = currLine;      
      } 
      else if (isCurrChatMsg) 
      { 
       yield return currLine; 
       prevLine = currLine; 
      } 
      else 
      { 
       prevLine += '\n' + currLine; 
      } 
      currLine = reader.ReadLine(); 

     } 
     yield return prevLine; 

    } 
} 

可以使用,如:

List<string> chatMessages = reader.ReadChatMessages().ToList();