2017-04-18 1 views
0

La fonction ci-dessous extrait les lettres de l'alphabet anglais d'une chaîne de caractères. Je souhaite créer une fonction similaire qui extrait uniquement les lettres cyrlic d'une chaîne donnée.Extrait des lettres cyrilliques de la chaîne

Mise à jour:

Avec le code fourni par Wiktor Stribiżew, j'obtenir les résultats suivants:

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

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

Toutes les idées?

+1

Essayez 'Grepl (" \\ p {cyrillique } ", x, perl = VRAI)". –

+0

Hmm .. il renvoie false pour toutes les entrées, même celles contenant des lettres cyrlic. Pourrait-il être l'encodage? – Prometheus

+0

Pourriez-vous s'il vous plaît partager certaines chaînes que vous testez contre (le code de test)? –

Répondre

2

stringi pourrait fournir des résultats plus cohérents multi-plateforme/système pour vous, mais à la fois stri_detect_regex et grepl (en mode "perl") devrait faire l'affaire:

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

La fonction stri_detect_regex a fonctionné. Mais grepl renvoie false, comme je l'ai mentionné précédemment. Merci pour l'aide! – Prometheus