使用正则表达式拆分R

Ju *_* Ko 5 regex r strsplit

我想使用R拆分一些聊天消息,这是一个示例:

example <- "[29.01.18, 23:33] Alice: Ist das hier ein Chatverlauf?\n[29.01.18, 23:45] Bob: Ja ist es!\n[29.01.18, 23:45] Bob: Der ist dazu da die funktionsweise des Parsers zu demonstrieren\n[29.01.18, 23:46] Alice: ?PTT-20180129-WA0025.opus (Datei angehängt)\n[29.01.18, 23:46] Bob: Ah, er kann also auch erkennen ob Voicemails gesendet wurden!\n[29.01.18, 23:46] Bob: Das ist praktisch!\n[29.01.18, 23:47] Bob: Oder?\n[29.01.18, 23:47] Alice: ja |Emoji_Grinning_Face_With_Smiling_Eyes| \n[29.01.18, 23:47] Alice: und Emojis gehen auch!\n[29.01.18, 23:47] Bob: Was ist mit normalen Smilies?\n[29.01.18, 23:49] Alice: ?Keine Ahnung, lass uns das doch mal ausprobieren\n[29.01.18, 23:50] Bob: Alles klar :) :D\n[29.01.18, 23:51] Alice: Scheint zu funktionieren!:P\n[29.01.18, 23:51] Bob: Meinst du, dass URLS auch erkannt werden?\n[29.01.18, 23:52] Bob: ?Schick doch mal eine zum ausprobieren!\n[29.01.18, 23:53] Alice: https://github.com/JuKo007\n[29.01.18, 23:58] Alice: ?Scheint zu funktionieren!\n[29.01.18, 23:59] Alice: Sehr schön!\n[30.01.18, 00:00] Alice: Damit sollten sich WhatsApp Verläufe besser quantifizieren lassen!\n[30.01.18, 00:02] Bob: ?Alles klar, los gehts  |Emoji_Relieved_Face| \n"
Run Code Online (Sandbox Code Playgroud)

基本上,我想在括号中的日期时间指示器前面拆分字符串,这是到目前为止我尝试过的操作:

  # Cutting the textblock into individual messages
  chat <- strsplit(example,"(?=\\[\\d\\d.\\d\\d.\\d\\d, \\d\\d:\\d\\d\\])",perl=TRUE)
  chat <- unlist(chat)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,在输出中,拆分似乎发生第一个方括号之后,而不是在前面:

 [1] "["                                                                                           
 [2] "29.01.18, 23:33] Alice: Ist das hier ein Chatverlauf?\n"                                     
 [3] "["                                                                                           
 [4] "29.01.18, 23:45] Bob: Ja ist es!\n"                                                          
 [5] "["                                                                                           
 [6] "29.01.18, 23:45] Bob: Der ist dazu da die funktionsweise des Parsers zu demonstrieren\n"     
 [7] "["                                                                                           
 [8] "29.01.18, 23:46] Alice: ?PTT-20180129-WA0025.opus (Datei angehängt)\n"                        
 [9] "["                                                                                           
[10] "29.01.18, 23:46] Bob: Ah, er kann also auch erkennen ob Voicemails gesendet wurden!\n"       
[11] "["                                                                                           
[12] "29.01.18, 23:46] Bob: Das ist praktisch!\n"                                                  
[13] "["                                                                                           
[14] "29.01.18, 23:47] Bob: Oder?\n"                                                               
[15] "["                                                                                           
[16] "29.01.18, 23:47] Alice: ja |Emoji_Grinning_Face_With_Smiling_Eyes| \n"                       
[17] "["                                                                                           
[18] "29.01.18, 23:47] Alice: und Emojis gehen auch!\n"                                            
[19] "["                                                                                           
[20] "29.01.18, 23:47] Bob: Was ist mit normalen Smilies?\n"                                       
[21] "["                                                                                           
[22] "29.01.18, 23:49] Alice: ?Keine Ahnung, lass uns das doch mal ausprobieren\n"                  
[23] "["                                                                                           
[24] "29.01.18, 23:50] Bob: Alles klar :) :D\n"                                                    
[25] "["                                                                                           
[26] "29.01.18, 23:51] Alice: Scheint zu funktionieren!:P\n"                                       
[27] "["                                                                                           
[28] "29.01.18, 23:51] Bob: Meinst du, dass URLS auch erkannt werden?\n"                           
[29] "["                                                                                           
[30] "29.01.18, 23:52] Bob: ?Schick doch mal eine zum ausprobieren!\n"                              
[31] "["                                                                                           
[32] "29.01.18, 23:53] Alice: https://github.com/JuKo007\n"                                        
[33] "["                                                                                           
[34] "29.01.18, 23:58] Alice: ?Scheint zu funktionieren!\n"                                         
[35] "["                                                                                           
[36] "29.01.18, 23:59] Alice: Sehr schön!\n"                                                       
[37] "["                                                                                           
[38] "30.01.18, 00:00] Alice: Damit sollten sich WhatsApp Verläufe besser quantifizieren lassen!\n"
[39] "["                                                                                           
[40] "30.01.18, 00:02] Bob: ?Alles klar, los gehts  |Emoji_Relieved_Face| \n" 
Run Code Online (Sandbox Code Playgroud)

当我尝试在线测试Regex模式或在python中使用它时,它按预期工作,因此对我来说,这似乎是strsplit函数的功能?非常欢迎提出任何有关如何更改我的R代码以使其正常工作的建议!我知道将输出粘贴回去以获得所需的输出是很容易的,但是我真的很想了解strsplit发生了什么并正确执行而不是将其修补回去。我想要的是:

 [1] "[29.01.18, 23:33] Alice: Ist das hier ein Chatverlauf?\n"                                                                                                                           
 [2] "[29.01.18, 23:45] Bob: Ja ist es!\n"                                                                                                                                                  
 [3] "[29.01.18, 23:45] Bob: Der ist dazu da die funktionsweise des Parsers zu demonstrieren\n"                                                                                         
 [4] "[29.01.18, 23:46] Alice: ?PTT-20180129-WA0025.opus (Datei angehängt)\n"                                                                                                      
[5] "[29.01.18, 23:46] Bob: Ah, er kann also auch erkennen ob Voicemails gesendet wurden!\n"                                                                                          
[6] "[29.01.18, 23:46] Bob: Das ist praktisch!\n"                                                                                                                                    
[7] "[29.01.18, 23:47] Bob: Oder?\n"                                                                                                                                                   
[8] "[29.01.18, 23:47] Alice: ja |Emoji_Grinning_Face_With_Smiling_Eyes| \n"                                                                                                            
[9] "[29.01.18, 23:47] Alice: und Emojis gehen auch!\n"                                                                                                                          
[10] "[29.01.18, 23:47] Bob: Was ist mit normalen Smilies?\n"                                                                                                                         
[11] "[29.01.18, 23:49] Alice: ?Keine Ahnung, lass uns das doch mal ausprobieren\n"                                                                                                    
[12] "[29.01.18, 23:50] Bob: Alles klar :) :D\n"                                                                                                                                       
[13] "[29.01.18, 23:51] Alice: Scheint zu funktionieren!:P\n"                                                                                                                        
[14] "[29.01.18, 23:51] Bob: Meinst du, dass URLS auch erkannt werden?"                                                                                                             
[15] "[29.01.18, 23:52] Bob: ?Schick doch mal eine zum ausprobieren!\n"                                                                                                                       
[16] "[29.01.18, 23:53] Alice: https://github.com/JuKo007\n"                                                                                                                                  
[17] "[29.01.18, 23:58] Alice: ?Scheint zu funktionieren!\n"                                                                                                                                  
[18] "[29.01.18, 23:59] Alice: Sehr schön!\n"                                                                                                                                                
[19] "[30.01.18, 00:00] Alice: Damit sollten sich WhatsApp Verläufe besser quantifizieren lassen!\n"                                                                                           
[20] "[30.01.18, 00:02] Bob: ?Alles klar, los gehts  |Emoji_Relieved_Face| \n" 
Run Code Online (Sandbox Code Playgroud)

The*_*ird 3

您可以添加否定前瞻(?!^)来断言不是字符串的开头。

\n\n

您更新后的行可能如下所示:

\n\n
chat <- strsplit(example,"(?!^)(?=\\\\[\\\\d\\\\d.\\\\d\\\\d.\\\\d\\\\d, \\\\d\\\\d:\\\\d\\\\d\\\\])",perl=TRUE)\n
Run Code Online (Sandbox Code Playgroud)\n\n

R 演示

\n\n

结果

\n\n
 [1] "[29.01.18, 23:33] Alice: Ist das hier ein Chatverlauf?\\n"                                     \n [2] "[29.01.18, 23:45] Bob: Ja ist es!\\n"                                                          \n [3] "[29.01.18, 23:45] Bob: Der ist dazu da die funktionsweise des Parsers zu demonstrieren\\n"     \n [4] "[29.01.18, 23:46] Alice: \xe2\x80\x8ePTT-20180129-WA0025.opus (Datei angeh\xc3\xa4ngt)\\n"                        \n [5] "[29.01.18, 23:46] Bob: Ah, er kann also auch erkennen ob Voicemails gesendet wurden!\\n"       \n [6] "[29.01.18, 23:46] Bob: Das ist praktisch!\\n"                                                  \n [7] "[29.01.18, 23:47] Bob: Oder?\\n"                                                               \n [8] "[29.01.18, 23:47] Alice: ja |Emoji_Grinning_Face_With_Smiling_Eyes| \\n"                       \n [9] "[29.01.18, 23:47] Alice: und Emojis gehen auch!\\n"                                            \n[10] "[29.01.18, 23:47] Bob: Was ist mit normalen Smilies?\\n"                                       \n[11] "[29.01.18, 23:49] Alice: \xe2\x80\x8eKeine Ahnung, lass uns das doch mal ausprobieren\\n"                  \n[12] "[29.01.18, 23:50] Bob: Alles klar :) :D\\n"                                                    \n[13] "[29.01.18, 23:51] Alice: Scheint zu funktionieren!:P\\n"                                       \n[14] "[29.01.18, 23:51] Bob: Meinst du, dass URLS auch erkannt werden?\\n"                           \n[15] "[29.01.18, 23:52] Bob: \xe2\x80\x8eSchick doch mal eine zum ausprobieren!\\n"                              \n[16] "[29.01.18, 23:53] Alice: https://github.com/JuKo007\\n"                                        \n[17] "[29.01.18, 23:58] Alice: \xe2\x80\x8eScheint zu funktionieren!\\n"                                         \n[18] "[29.01.18, 23:59] Alice: Sehr sch\xc3\xb6n!\\n"                                                       \n[19] "[30.01.18, 00:00] Alice: Damit sollten sich WhatsApp Verl\xc3\xa4ufe besser quantifizieren lassen!\\n"\n[20] "[30.01.18, 00:02] Bob: \xe2\x80\x8eAlles klar, los gehts  |Emoji_Relieved_Face| \\n"    \n
Run Code Online (Sandbox Code Playgroud)\n