2017-04-18 129 views
0

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

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

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

更新:

与Wiktor的Stribiżew提供的代码,我得到如下结果:

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

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

任何想法?

+1

尝试'grepl(“\\ p {西里尔}“,x,perl = TRUE)'。 –

+0

嗯..它会为所有条目返回false,即使是那些包含cyrlic字母的条目。它可能是编码? – Prometheus

+0

您能否分享一些您测试的字符串(测试代码)? –

回答

2

stringi可能提供更多的跨平台/系统一致的结果对你但两者stri_detect_regexgrepl(在 “perl” 的模式)应该做的伎俩:

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 
+0

该stri_detect_regex函数工作。但是,正如我前面提到的那样,grepl会返回false。谢谢您的帮助! – Prometheus