2015-06-16 5 views
1

У меня есть строка id <- "Hello these are words N12345678 hooray how fun".Разбиение строки на список подстрок

Я хотел бы извлечь только N12345678 из этой строки.

До сих пор я использовал strsplit(id, " "). Теперь у меня есть

>id 
>[[1]] 
>[1] "Hello" "these" "are" "words" "N12345678" "hooray" "how" 
>[8] "fun" 

который имеет список типов и длины 1 (несмотря на то, по-видимому, имеющие 8 элементов?)

Если я затем использовать id <- id[grep("^[N][0-9]",id)], идентификатор является пустым списком.

Я думаю, что мне нужно сделать, это разбить строку на список длиной 8 с каждым элементом в качестве подстроки, а затем grep должен иметь возможность выбирать шаблон, но я не уверен, как это сделать ,

+0

Как насчет только 'sub (". * (N \\ d +). * "," \\ 1 ", id)'? –

+0

'gsub (". * (N [0-9] +). * "," \\ 1 ", id)' '[1]" N12345678 "' –

+0

Вы также можете попробовать 'unlist (strsplit (id, "")), чтобы сделать данные лучше. – Michal

ответ

0

Если вы настаиваете на использовании strsplit. Я думаю, это может решить проблему:

id <- "Hello these are words N12345678 hooray how fun" 
id = strsplit(id, " ") 
id[[1]][grep("^N[1-9]", id[[1]])] 

Обратите внимание, что я не изменял ваше регулярное выражение. Это может быть более точное выражение, такое как ^N\\d+$.

2

Используйте regmatches

> regmatches(id, regexpr("N[0-9]+", id)) 
[1] "N12345678" 
0

Вы знаете о strtok? Он будет анализировать вашу строку ввода для определенных символов. Для моего примера я разбиваю кусочек своей строки каждый раз, когда я нахожу пробел.

tempVar = strtok(string, " "); 
// tempVar has "id" or everything up to the first space 
while (tempVar != NULL) 
{ 
    tempVar = strtok(NULL, " "); 
    //now tempVar picked up the next word, and will loop picking up the next word until the end of string 
} 

Используя это, ваше «Привет это слово N123456789» Ура бы сделать это: tempVar будет Здравствуйте, тогда «это» и т.д. и т.п.

Каждый раз, когда через tempVar петли получит новый стоимость. Поэтому я хотел бы предложить оценку tempVar в цикле (до захвата следующий), так что вы можете остановиться, когда у вас есть N123456789