正则表达式:仅匹配值的第一个实例

时间:2015-04-17 01:24:05

标签: regex r

我已经查看过类似于我的大量正则表达式问题,但是当我替换他们感兴趣的值(例如逗号)时,所有这些问题看起来都非常复杂或不起作用我对匹配(下划线)感兴趣。

基本上,我想仅匹配以下示例中每行的第一个下划线:

据我所知,      _+? 应该工作,但不是。仍然匹配所有。同样的      _{1} 也应该有效,但它匹配所有,而不仅仅是量词指定的第一个。

示例:

armsling_R_1_Group

armsling_R_1_Rank

armsling_R_2_Group

armsling_R_2_Rank

armsling_R_3_Group

armsling_R_3_Rank

armsling_R_4_Group

armsling_R_4_Rank

armsling_C_1

armsling_F_1

armsling_T_1

armsling_T_2

armsling_T_3

armsling_T_4

编辑:这是针对R代码的,但我一直在使用regexr.com来测试我的表达式

1 个答案:

答案 0 :(得分:1)

  

我尝试使用separate()中的tidyr将这些值(在一列中)分成两列。如果我只使用下划线,它也会查看以下内容。

根据发布的答案中的评论,以下内容适合您。

library(tidyr)
separate(x, y, c('icon', 'measure'), '_', extra = 'merge')

#        icon   measure
# 1  armsling R_1_Group
# 2  armsling  R_1_Rank
# 3  armsling R_2_Group
...
...

对于正则表达式解决方案,我会使用gsubfn包中的strapply

m <- strapply(as.character(x$y), '([^_]*)_(.*)', 
   ~ c(icon = x, measure = y), simplify = rbind)

X <- as.data.frame(m, stringsAsFactors = FALSE)

#        icon   measure
# 1  armsling R_1_Group
# 2  armsling  R_1_Rank
# 3  armsling R_2_Group
...
...