2017-01-24 6 views
-2

В R есть способ извлечь данные на основе начала и конца шаблона, но не средних данных?В R есть способ извлечь данные, основанные на начале и конце шаблона, но не на средних данных?

ie. если следующее было в одной ячейке

(1) Number = '1111111111, 0000000000' Text =.... 
(2) Number = '0000000000' Text =.... 

это привело бы:

(1) 1111111111, 0000000000 
(2) 0000000000 

Я пробовал:

x1<-str_match(x,"(?<=Number'\\s\\=\\s\\')(\\d|\\s|\\,)\\d\\'") 

, но это не работает.

+6

Возможный дубликат [Извлечение чисел из векторов строк] (http://stackoverflow.com/questions/14543627/e xtracting-numbers-from-vectors-of-strings) – user2100721

+0

Пожалуйста, объясните, какие именно требования и строковый ввод выглядят, неясно, из чего вы показали в вопросе. 'str_match' является хорошим кандидатом здесь, но, похоже, вам нужно' str_match_all (x, "(?: Number \\ s * = \\ s * '| \\ G (?! \\ A) \\ s *, \\ s *) (\\ d +) ")' ([demo] (https://regex101.com/r/X7Rmb7/1)). И захватите содержимое группы 1. –

ответ

0

Мы можем попытаться с str_extract_all

library(stringr) 
sapply(str_extract_all(x, "[0-9]+"), toString) 
#[1] "1111111111, 0000000000" "0000000000" 
0

Вы можете использовать регулярные выражения PCRE для извлечения номера после Number=' от вашего ввода текста:

(?:Number\s*=\s*'|\G(?!\A)\s*,\s*)\K\d+ 

См regex demo. Подробнее

Pattern:

  • (?:Number\s*=\s*'|\G(?!\A)\s*,\s*) - либо из двух альтернатив:
    • Number\s*=\s*' - Number и = приложенного 0+ непечатаемого
    • | - или
    • \G(?!\A)\s*,\s* - конец предыдущего успешного мата ч (\G(?!\A)) и запятая прилагается 0+ (\s* пробелов)
  • \K - опустить текст, совпадающие до сего пор
  • \d+ - 1+ цифры (возвращенной как матч)

См R demo:

> x <- c("(1) Number = '1111111111, 0000000000' Text =....", "(2) Number = '0000000000' Text =....") 
> regmatches(x, gregexpr("(?:Number\\s*=\\s*'|\\G(?!\\A)\\s*,\\s*)\\K\\d+", x, perl=TRUE)) 
[[1]] 
[1] "1111111111" "0000000000" 

[[2]] 
[1] "0000000000" 

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

  • Нет связанных вопросов^_^