Выбор строк переменной длины среди нескольких строк в R - PullRequest
1 голос
/ 31 марта 2020

Мне нужна функция или, скорее, сценарий регулярного выражения, который позволит мне выбирать текстовые строки на основе условия.

Пример:

Input <- c("Red1 Orange", "Yellow Green2", "Blue3 Violet")

Приводит к: "Red1" , "Green2", "Blue3"

Я пробовал различные варианты, включая:

str_extract(NamesCor, "[a-z][a-z][a-z][a-z][0-9]|
            [a-z][a-z][a-z][0-9]|
            [a-z][a-z][0-9]")

, который возвращает reen2, blue3

Ответы [ 3 ]

4 голосов
/ 31 марта 2020

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

stringr::str_extract(Input, "\\b[A-Za-z]+\\d+\\b")
stringr::str_extract(Input, "\\b\\p{L}+\\d+\\b")   # A Unicode aware version

См. R demo :

Input <- c("Red1 Orange", "Yellow Green2", "Blue3 Violet")
library(stringr)
str_extract(Input, "\\b[A-Za-z]+\\d+\\b")
## [1] "Red1"   "Green2" "Blue3" 

См. Также regex demo . Подробности:

  • \b - граница слова
  • [A-Za-z]+ - 1+ букв ASCII (\p{L} соответствует любой букве Unicode)
  • \d+ - 1+ цифр
  • \b - граница слова
3 голосов
/ 31 марта 2020

в Base R.

 gsub(".*?([0-9]\\w+|\\w+[0-9]).*","\\1",Input)
   [1] "Red1"   "Green2" "Blue3" 

или

gsub(".*?(\\d\\w+|\\w+\\d).*","\\1",Input)
   [1] "Red1"   "Green2" "Blue3" 

Мне нравится использовать этот шпаргалку для регулярных выражений в R

1 голос
/ 31 марта 2020

Использование sub в базе R:

sub('.*?([A-Za-z]+\\d+).*', '\\1', Input)
#[1] "Red1"   "Green2" "Blue3" 

Это захватывает символы, за которыми следуют цифры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...