首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于规则(重复连字符)从字符串中提取字符

基于规则(重复连字符)从字符串中提取字符
EN

Stack Overflow用户
提问于 2018-12-21 09:59:38
回答 1查看 45关注 0票数 3

我有一个很大的dataframe,它的列如下所示:

代码语言:javascript
复制
var <- c("150507-001-0000001", "KMD070515-2-0000001", 
"15144KMD01AA-0000001", "Z75Z151222-0000001")

我要做的是提取字符串的一部分。我要所有字符,,第二个连字符,。所以这就是我需要的:

代码语言:javascript
复制
150507-001
KMD070515-2 
15144KMD01AA-0000001
Z75Z151222-0000001

所以我知道如果我只想要连字符之前的数据,我会这样做:

代码语言:javascript
复制
> var <- sub("-.*", "", var)

> var

150507
KMD070515 
15144KMD01AA
Z75Z151222

我还尝试了一个包qdap,它给了我我想要的东西:

代码语言:javascript
复制
library("qdap")
var <- beg2char(var, "-", 2)

我确实在最后一段代码中得到了我需要的列,但是似乎有些地方不对劲。因为当我根据列执行left_join时,它不起作用。我可以在数据视图中通过复制粘贴找到匹配的内容,但是left_join什么也找不到。但是,使用sub (参见上文)对var执行左联接时要做一些工作。但是对于我的一些行,我需要在第一个连字符之后(在第二个连字符之前)找到匹配的字符。

EN

回答 1

Stack Overflow用户

发布于 2018-12-21 10:01:01

我们可以使用sub来匹配不是-的字符模式,然后是-和另一组不是-的字符,捕获为一个组((...)),然后用捕获组的反向引用(\\1)替换。

代码语言:javascript
复制
sub("^([^-]+-[^-]+).*", "\\1", var)
#[1] "150507-001"           "KMD070515-2"         
#[3]  "15144KMD01AA-0000001" "Z75Z151222-0000001"  
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53882656

复制
相关文章

相似问题

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