R gsub同时固定图案和非固定图案

use*_*285 1 regex r gsub data.table

我有一个data.table数据R 的列,文本如下:

> my_table
                           descr
   1:   DESCRIPTIONA - JONES:4:2
   2:  DESCRIPTIONB - WILDER:6:7
  ---                          
 253:    DESCRIPTIONA - MANN:5:8
 254: DESCRIPTIONB - ROBERTS:3:4
Run Code Online (Sandbox Code Playgroud)

请注意有两种描述:DESCRIPTIONADESCRIPTIONB.我想替换整个描述部分,包括直到第一个分号的名称,A如果它是DESCRIPTIONA,B如果是的话DESCRIPTIONB.这意味着我完全不在乎这个名字.输出应该如下所示:

> my_table
      descr
   1: A:4:2
   2: B:6:7
  ---                          
 253: A:5:8
 254: B:3:4
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用gsub来实现这一目标,但我不能让正则表达式替换掉这部分(DESCRIPTIONA - JONES):4:2.这很困难,因为每个名字都不同,而且长度不同.有任何想法吗?

Gre*_*gor 5

x = c(
    "DESCRIPTIONA - JONES:4:2",
    "DESCRIPTIONB - WILDER:6:7",
    "DESCRIPTIONA - MANN:5:8",
    "DESCRIPTIONB - ROBERTS:3:4"
)

gsub(pattern = "DESCRIPTION(.)[^:]*", replacement = "\\1", x)
# [1] "A:4:2" "B:6:7" "A:5:8" "B:3:4"
Run Code Online (Sandbox Code Playgroud)

说明:"DESCRIPTION(.)[^:]*"匹配单词DESCRIPTION,然后匹配由parens ."保存"为捕获组的单个字符()(),然后它继续匹配非冒号字符[^:],尽可能多(*).它取代了与first(\\1)捕获组的完全匹配.

你可以在这里玩它来更好地理解:https://regex101.com/r/Sc7oC1/1