我正在与正则表达式斗争,或者换句话说:我不知道如何解决它...

我有几个网络元素的组合,希望提取名称的第一部分.

左边是我的源值,右边是我想要实现的目标:

|Source           |Goal       |
|:----------------|:----------|
|8000N01 V001     |8000N01    |
|6000N04_860 V001 |6000N04    |
|6999AP001        |6999AP001  |
|8000N01.2 V009   |8000N01.2  |
|8000N01.3        |8000N01.3  |
|8000N0613_86pian |8000N0613  |
|8852ANU146 V001  |8852ANU146 |
|8000Z001_plan    |8000Z001   |

左侧总是以4位数开始.但是,字符可以变化,字符后面的数字也可以变化.

Data:

library(data.table)

df = data.table(Source=c("8000N01 V001", "6000N04_860 V001", "6467RP001", "8000N01.2 V009", "8000N01.3", "8000N0613_86pian", "8852ANU146 V001", "8000Z001_plan"),
                Goal=c("8000N01", "6000N04", "6467RP001", "8000N01.2", "8000N01.3", "8000N0613", "8852ANU146", "8000Z001"))

我很高兴能得到任何帮助.

推荐答案

你可以使用^\\d{4}[A-Za-z]+\\d+(\\.\\d+){0,1}来获取要求的内容.

左侧总是以4位数开始:^\\d{4}

但角色也会有所不同:[A-Za-z]+

还有字符后面的数字:\\d+

如果有一个点,我想保留点后面的数字:(\\.\\d+){0,1}

df[, Goal_Check:=stringr::str_extract(Source, "^\\d{4}[A-Za-z]+\\d+(\\.\\d+){0,1}")]
df
df
#             Source       Goal Goal_Check
#1:     8000N01 V001    8000N01    8000N01
#2: 6000N04_860 V001    6000N04    6000N04
#3:        6467RP001  6467RP001  6467RP001
#4:   8000N01.2 V009  8000N01.2  8000N01.2
#5:        8000N01.3  8000N01.3  8000N01.3
#6: 8000N0613_86pian  8000N0613  8000N0613
#7:  8852ANU146 V001 8852ANU146 8852ANU146
#8:    8000Z001_plan   8000Z001   8000Z001

对于给定的示例,sub中使用的[ _].*也可以完成这项工作.

sub("[ _].*", "", df$Source)
#[1] "8000N01"    "6000N04"    "6467RP001"  "8000N01.2"  "8000N01.3" 
#[6] "8000N0613"  "8852ANU146" "8000Z001"  

R相关问答推荐

如何根据条件计算时差(天)

R Highcharts与两个位置关联的注释

根据模式将一列拆分为多列,并在R中进行拆分

在R中为马赛克图中的每个字段着色

如何在所有绘图中保持条件值的 colored颜色 相同?

合并DFS列表并将索引提取为新列

使用rest从header(h2,h3,table)提取分层信息

R中的哈密顿滤波

如何从容器函数中提取conf并添加到ggplot2中?

如何根据数据帧中的值从该数据帧中提取值?

R中的类别比较

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

在具有多个响应变量的比例堆叠条形图上方添加总计

多元正态分布的计算

R仅当存在列时才发生变异

如何使用循环从R中的聚合函数创建列,而不会在名称中给出&q;$&q;?

如何在R中的两列以上使用联合(&U)?

将R中对象的CSV数组转换为JSON数组

如何在一个GGPLATE中绘制多个灰度平滑?

当某些实验治疗被审查了75%时,使用/后继测试意味着在r中使用