2015-05-19 3 views
2

Как извлечь подстроки из этого входа:Как извлечь подстроку ввода?

input = c("Inspecting sequence ID NM_000775",  
      "Inspecting sequence ID NM_001014975", 
      "Inspecting sequence ID NM_001080484") 

получить:

output= c("NM_000775", "NM_001014975", "NM_001080484") 
+0

'read.table (текст = х) [4]' – rawr

+0

оба работают очень хорошо. Большое спасибо rawr & akrun! –

ответ

2

Вы можете попробовать

sub('.*([A-Z]{2}\\_\\d+)$', '\\1', input) 
#[1] "NM_000775" "NM_001014975" "NM_001080484" 

Или, если есть ровно 3 слова следуют пробелами до последней подстроки (для извлечения)

sub('(\\w+\\s+){3}', '', input) 
    #[1] "NM_000775" "NM_001014975" "NM_001080484" 
1

Вы можете использовать stringr пакет:

library(stringr) 

unlist(str_extract_all(input, "NM_\\d+")) 
#[1] "NM_000775" "NM_001014975" "NM_001080484" 

Как akrun упоминалось, можно также избежать unlist() просто используя str_extract():

str_extract(input, "NM_\\d+") 
#[1] "NM_000775" "NM_001014975" "NM_001080484" 

Используемое регулярное выражение, NM_\\d+, будет соответствовать всем, начиная с NM_, за которым следует одна или несколько цифр.

В зависимости от того, NM_ специфичен к примеру, или является представителем вашей конкретной проблемы, вы можете обобщить регулярное выражение [A-Z]{2}_\\d+ или, как akrun упоминалось, \\w+_\\d+.

+1

@akrun: Замечательно, спасибо за предложения! –

1
sub("Inspecting sequence ID\\s+","",input) 
[1] "NM_000775" "NM_001014975" "NM_001080484" 
2

Попробуйте это:

gsub('.*\\s','',input) 
+1

Обратите внимание, что это будет работать, только если вход гарантирован в формате, указанном в сообщении. Если есть одно конечное пространство, это приведет к удалению нужной части строки. –

0

Предполагая, что NM является идентификатором х годов запись, другая возможность

gsub(".*\\s*(NM_\\d+)$", "\\1", input)