您可以使用
df$col <- sub("(\\d:\\d+):\\d+$", "\\1", df$col)
请查看正则表达式演示
详情
(\\d:\\d+)
- 捕获组1(可以通过替换模式中的\1
访问其值):一个数字,一个冒号和1个或多个数字。
:
- 一个冒号
\\d+
- 1个或多个数字
$
- 字符串结尾。
R演示:
col <- c("WBU-ARGU*06:03:04","WBU-ARDU*08:01:01","WBU-ARFU*11:03:05","WBU-ARFU*03:456")
sub("(\\d:\\d+):\\d+$", "\\1", col)
另一种方法:
df$col <- sub("^(.*?:\\d+).*", "\\1", df$col)
请查看正则表达式演示。
在此,
^
- 字符串开头
(.*?:\\d+)
- 第1组:0个或多个任意字符,尽可能少地匹配(由于使用了懒惰的*?
量词),然后是:
和1个或多个数字
.*
- 剩下的字符串。
但是,它应该与PCRE正则表达式引擎一起使用,传递perl=TRUE
:
col <- c("WBU-ARGU*06:03:04","WBU-ARDU*08:01:01","WBU-ARFU*11:03:05","WBU-ARFU*03:456")
sub("^(.*?:\\d+).*", "\\1", col, perl=TRUE)
查看R在线演示。
col
还是Col
? - s_baldur