>我有一个带有字符串的数据帧,如下所示:
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 个或多个换行符序列(n
或r
或rn
) - 、
:
位数字,然后是 2 位数字。由于(?=...)
是积极的前瞻(零宽度断言,不会将匹配的字符放入匹配值中),因此与其匹配的文本不会从结果中删除。
(?=d{2}:d{2}:d{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"