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
归档时间: |
|
查看次数: |
78 次 |
最近记录: |