R 正则表达式:通过 \\n [A-z] 和 [:punct:] 的组合拆分字符串

R regex: split a string by combination of \\n [A-z] & [:punct:]

我有一个数据框,其中的字符串如下所示:

bla bla.\n14:39:51 info: pyku bla .\n14:39:51 info: \n14:39:51 info: \n14:39:57 Sam: <span>pyk pyk</span>\n14:43:15 on and on \n14:43:59 you get an idea

我想将由 \n(number):(number):(number) 序列分隔的行拆分成不同的行。我试过了

stringr::separate_rows(df3$Transcript[1], Transcript , sep = "\n")

及其与 [A-z][:punct:] 的不同组合无济于事。最直接的方法是什么?

谢谢

您想用一个换行符和一个时间戳来拆分字符串。您可以将基本 R strsplit 函数与基于正前瞻的 PCRE 正则表达式一起使用:

strsplit(s, "\R+(?=\d{2}:\d{2}:\d{2})", perl=TRUE)

regex demo

图案详情

  • \R+ - 1 个或多个换行符序列(\n\r\r\n
  • (?=\d{2}:\d{2}:\d{2}) - 接着是 2 位数字,:,2 位数字,: 和 2 位数字。由于 (?=...) 是一个积极的前瞻(一个零宽度断言,不会将匹配的字符放入匹配值中),因此不会从结果中删除与其匹配的文本。

R demo:

s <- "bla bla.\n14:39:51 info: pyku bla .\n14:39:51 info: \n14:39:51 info: \n14:39:57 Sam: <span>pyk pyk</span>\n14:43:15 on and on \n14:43:59 you get an idea"
strsplit(s, "\R+(?=\d{2}:\d{2}:\d{2})", perl=TRUE)

输出:

[[1]]
[1] "bla bla."                           "14:39:51 info: pyku bla ."         
[3] "14:39:51 info: "                    "14:39:51 info: "                   
[5] "14:39:57 Sam: <span>pyk pyk</span>" "14:43:15 on and on "               
[7] "14:43:59 you get an idea"