gsub 替换一组字符后的文本

gsub replace text after set of characters

我有很多错误消息需要清理。

一些错误以文本 "(sec): 0.xxx" 结尾 我正在尝试使用 gsub 删除(秒)

之后的所有内容
data$Message <- gsub("(sec).*", "", data$Message, perl = TRUE)

此 returns 之后的所有内容 (

我知道只使用“:”或“)”会很容易,但它会影响其他我不想更改的错误。

有没有一种方法可以使用 gsub 查看多个字符 - 如“(sec)” - 而不是一个? 在一个相关的说明中,他们的符号代表类似于“。”的任何数字(不包括文本)?

您可以使用正则表达式 look behind ?<= 来避免 sec 被删除,同时断言删除的模式遵循 sec ,因此 (?<=sec\)).* 将删除 sec) 之后的所有内容,但不会删除 sec) 本身:

gsub("(?<=sec\)).*", "", "(sec): 0.xxx", perl = TRUE)
# [1] "(sec)"

您可以 select 表达式的第一部分(括号内)并省略其余部分:

gsub('(^.*\(sec\)).*', '\1', '(sec): 0.xxx')

## [1] "(sec)"