从字符串中提取西里尔字母

时间:2017-04-18 09:55:39

标签: r regex grepl

下面的函数从字符串中提取英文字母中的任何字母。

is.letter <- function(x) grepl("[:alpha:]", x) 

我想构建一个类似的函数,只从给定的字符串中提取cyrlic字母。

更新:

使用WiktorStribiżew提供的代码,我得到以下结果:

grepl("\\p{Cyrillic}", x, perl=TRUE)

test[, c(2, 11)]
      MOBILE_NUMBER contain_cyrlic
    1  НЕМА ТЕЛЕФОН          FALSE
    2      НЕПОЗНАТ          FALSE
    3  НЕМА ТЕЛЕФОН          FALSE
    4  НЕМА ТЕЛЕФОН          FALSE

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

stringi可能会为您提供更多跨平台/系统一致的结果,但stri_detect_regexgrepl(&#34; perl&#34;模式)应该可以解决问题:

library(stringi)
library(dplyr)

data_frame(
  MOBILE_NUMBER = c("НЕМА ТЕЛЕФОН", "НЕПОЗНАТ", "НЕМА ТЕЛЕФОН", "НЕМА ТЕЛЕФОН")
) -> tst

tst
## # A tibble: 4 × 1
##   MOBILE_NUMBER
##           <chr>
## 1  НЕМА ТЕЛЕФОН
## 2      НЕПОЗНАТ
## 3  НЕМА ТЕЛЕФОН
## 4  НЕМА ТЕЛЕФОН

(t1 <- mutate(tst, is_cyrillic = grepl("\\p{Cyrillic}", MOBILE_NUMBER, perl=TRUE)))
## # A tibble: 4 × 2
##   MOBILE_NUMBER is_cyrillic
##           <chr>       <lgl>
## 1  НЕМА ТЕЛЕФОН        TRUE
## 2      НЕПОЗНАТ        TRUE
## 3  НЕМА ТЕЛЕФОН        TRUE
## 4  НЕМА ТЕЛЕФОН        TRUE

(t2 <- mutate(tst, is_cyrillic = stri_detect_regex(MOBILE_NUMBER, "\\p{Cyrillic}")))

## # A tibble: 4 × 2
##   MOBILE_NUMBER is_cyrillic
##           <chr>       <lgl>
## 1  НЕМА ТЕЛЕФОН        TRUE
## 2      НЕПОЗНАТ        TRUE
## 3  НЕМА ТЕЛЕФОН        TRUE
## 4  НЕМА ТЕЛЕФОН        TRUE

identical(t1, t2)
## [1] TRUE