首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R固定模式和非固定模式同时存在

R固定模式和非固定模式同时存在
EN

Stack Overflow用户
提问于 2018-02-03 04:37:28
回答 1查看 94关注 0票数 1

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

代码语言:javascript
复制
> my_table
                           descr
   1:   DESCRIPTIONA - JONES:4:2
   2:  DESCRIPTIONB - WILDER:6:7
  ---                          
 253:    DESCRIPTIONA - MANN:5:8
 254: DESCRIPTIONB - ROBERTS:3:4

注意,有两种描述:DESCRIPTIONADESCRIPTIONB。如果它是DESCRIPTIONA,我想用A替换整个描述部分,如果它是DESCRIPTIONB,则用B替换第一个分号之前的名称。这意味着我完全不关心这个名字。输出应如下所示:

代码语言:javascript
复制
> my_table
      descr
   1: A:4:2
   2: B:6:7
  ---                          
 253: A:5:8
 254: B:3:4

我正在尝试使用gsub来完成此任务,但我无法让正则表达式仅替换部分(DESCRIPTIONA - JONES):4:2。这很困难,因为每个名称都是不同的,并且长度也不同。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-02-03 04:42:32

代码语言:javascript
复制
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"

说明:"DESCRIPTION(.)[^:]*"匹配单词DESCRIPTION,然后匹配单个字符(.),该字符被()作为捕获组“保存”,然后它继续匹配非冒号字符[^:],尽可能多地匹配(*)。它将完全匹配替换为第一个(\\1)捕获组。

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48590529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档