2015-04-17 3 views
1

Я просмотрел множество вопросов регулярного выражения, похожих на мои, но все они кажутся очень сложными или не работают, когда я заменяю интересующее их значение (например, запятую), со значением, которое меня интересует совпадение (подчеркивание).Regex: совпадение только с первым экземпляром значения

В принципе, я хочу, чтобы соответствовать только первый подчеркивание в каждой строке в следующем примере:

Насколько я могу судить, _+? должен работать, но не делает. Все еще соответствует всем. То же самое для _{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 

Edit: Это для R кода, но я использую regexr.com, чтобы проверить мои выражения

+0

Какие языки/инструмент вы используете? –

+0

Это для кода R, но я использовал http://www.regexr.com/ для проверки моих выражений. – jzadra

ответ

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 
... 
... 

Для регулярного решения выражения, я хотел бы использовать strapply из gsubfn пакета:

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 
... 
... 
+0

Спасибо! Я пинаю себя, что я этого не видел. Это решает мою непосредственную проблему, однако, если кто-нибудь знает, как это сделать в Regex, мне все равно хотелось бы узнать, возможно ли это для моего собственного назидания. – jzadra

+0

@ 86smopuiM, обновлено ... – hwnd

Смежные вопросы