R regex:通过 [A-z] 和 [:p unct:] 的组合拆分字符串



>我有一个带有字符串的数据帧,如下所示:

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)

查看正则表达式演示

图案详细信息

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

R 演示:

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"          

最新更新