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)
请注意有两种描述:DESCRIPTIONA和DESCRIPTIONB.我想替换整个描述部分,包括直到第一个分号的名称,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.这很困难,因为每个名字都不同,而且长度不同.有任何想法吗?
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