2013-07-16 4 views
1

Есть ли возможность остановить поиск после того, как первое совпадение найдено с помощью str_match? Что-то эквивалентное «m» grep? Я посмотрел в пакет stringr, но ничего не нашел. Возможно, я пропустил это?Стоп после найденного первого совпадения (str_match)

В данной строке:

str <- "This is a 12-month study cycle" 

Я использую ниже, чтобы извлечь: 12 месяцев от него

str_match(str, "(?i)(\\w+)[- ](month|months|week|weeks)")[1] 

Но если строка ул распространяется на:

"This is a 12-month study cycle. In the 2 month period,blah blah...". 

Я бы хотел, чтобы поиск просто остановился и получил 12-месячный срок и не получил оба: 12-месячный и 2-месячный. Любая идея, как я могу это сделать?

+0

что вы пытаетесь выполнить? .. он может найти что-нибудь с месяцем/месяцами/неделями/неделями для этого? .. независимо от пробелов и -? –

+0

Помогите нам помочь вам, отредактируйте ваш вопрос, его трудно прочитать, уточнить ввод и желаемый результат. – zx8754

ответ

3

Как насчет этого?

str <- "This is a 12-month study cycle"  
regmatches(str, regexpr("(?i)(\\w+)[- ](month|months|week|weeks)", str)) 

[1] "12 месяцев"

str2 <- "This is a 12-month study cycle. In the 2 month period,blah blah..." 
regmatches(str2, regexpr("(?i)(\\w+)[- ](month|months|week|weeks)", str2)) 

[1] "12 месяцев"

+0

Отлично. Благодарю. Это сработало отлично. – BRZ

0

Попробуйте stringi пакет. Если вы хотите сопоставить все, используйте stri_match_all_regex, если только первое или последнее использование stri_match_first_regex или stri_match_last_regex.

stri_match_first_regex(str, "(?i)(\\w+)[- ](month|months|week|weeks)") 
    [,1]  [,2] [,3] 
[1,] "12-month" "12" "month" 

stri_match_all_regex(str, "(?i)(\\w+)[- ](month|months|week|weeks)") 
[[1]] 
    [,1]  [,2] [,3] 
[1,] "12-month" "12" "month" 
[2,] "2 month" "2" "month" 
Смежные вопросы