Извлеките соответствие регулярного выражения

Вы не можете привести объект user к объекту employee, так как они не имеют никакого отношения. У вас должен быть некоторый класс Mapper, который отобразит объект User на объект Employee.

class UserToEmployee{
   public Employee map(User user){
       Employee e = new Employee();
       e.setUserId(user.getUserId());
       // so on set all the required properties
      return e;
    }
}

Тогда используйте это как:

User u = new User(12,"johnson","pam",new Date());
UserToEmployee mapper = new UserToEmployee();
Employee e = mapper.map(u)
97
задан Scarabee 5 March 2018 в 01:29
поделиться

6 ответов

Используйте новый пакет stringr, который обёртывает все существующие регулярные выражения, работает в последовательном синтаксисе и добавляет несколько отсутствующих:

library(stringr)
str_locate("aaa12xxx", "[0-9]+")
#      start end
# [1,]     4   5
str_extract("aaa12xxx", "[0-9]+")
# [1] "12"
156
ответ дан 24 November 2019 в 05:20
поделиться

Используя пакет отклеивают , мы сделали бы следующее:

# install.packages("unglue")
library(unglue)
unglue_vec(c("aaa12xxx", "aaaARGH!xxx"), "{prefix}{number=\\d+}{suffix}", var = "number")
#> [1] "12" NA

<глоток>, Созданный 06.11.2019 reprex пакет (v0.3.0)

Использование convert аргумент для преобразования в число автоматически:

unglue_vec(
  c("aaa12xxx", "aaaARGH!xxx"), 
  "{prefix}{number=\\d+}{suffix}", 
  var = "number", 
  convert = TRUE)
#> [1] 12 NA
0
ответ дан 24 November 2019 в 05:20
поделиться

Maybe

gsub("[^0-9]", "", "aaa12xxxx")
# [1] "12"
24
ответ дан 24 November 2019 в 05:20
поделиться

Одним из вариантов будет вот это:

test <- regexpr("[0-9]+","aaa12456xxx")

Теперь, заметка regexpr дает вам начальный и конечный индексы строки:

    > test
[1] 4
attr(,"match.length")
[1] 5

Так что вы можете использовать эту информацию с подстрочной функцией

substr("aaa12456xxx",test,test+attr(test,"match.length")-1)

Я уверен, что есть более элегантный способ сделать это, но это был самый быстрый способ, который я смог найти. Кроме того, вы можете использовать sub/gsub, чтобы удалить то, что вы не хотите оставлять то, что вы хотите.

4
ответ дан 24 November 2019 в 05:20
поделиться

Вы можете использовать ленивое сопоставление регулярных выражений PERL:

> sub(".*?([0-9]+).*", "\\1", "aaa12xx99",perl=TRUE)
[1] "12"

Попытка заменить нецифровые символы в этом случае приведет к ошибке.

14
ответ дан 24 November 2019 в 05:20
поделиться

Использование strapply в пакете gsubfn. strapply похож на apply в том, что аргументы - это объект, модификатор и функция, за исключением того, что объект является вектором строк (а не массивом), а модификатор - регулярным выражением (а не полем):

library(gsubfn)
x <- c("xy13", "ab 12 cd 34 xy")
strapply(x, "\\d+", as.numeric)
# list(13, c(12, 34))

Это говорит о совпадении одна или несколько цифр (\ d +) в каждом компоненте x, передающие каждое совпадение через as.numeric. Он возвращает список, компоненты которого являются векторами совпадений соответствующих компонентов x. Глядя на выходные данные, мы видим, что первый компонент x имеет одно совпадение, равное 13, а второй компонент x имеет два совпадения, которые равны 12 и 34. См. http://gsubfn.googlecode.com для больше информации.

2
ответ дан 24 November 2019 в 05:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: