2017-10-07 3 views
1

J'ai un vecteur de caractères en russe. Voir le vecteur exemple ci-dessous -Recherche de caractères alphanumériques dans R

x = "nНозологические единицы \r\n В20 Болезнь, вызванная вирусом иммунодефицита человека [ВИЧ], проявляющаяся в виде \r\nинфекционных и паразитарных болезней \r\n В21 Болезнь, вызванная вирусом иммунодефицита человека [ВИЧ], проявляющаяся в виде \r\nзлокачественных новообразований \r\n В22 Болезнь, вызванная вирусом иммунодефицита человека [ВИЧ], проявляющаяся в виде \r\nдругих уточненных болезней \r\n В78.1 Болезнь, вызванная вирусом иммунодефицита человека [ВИЧ], проявляющаяся в виде \r\nдругих состояний \r\n В24 Болезнь, вызванная вирусом иммунодефицита человека [ВИЧ], неуточненная \r\n Z21 Бессимптомный инфекционный статус, вызванный вирусом иммунодефицита человека" 

Je veux extraire ces valeurs - B20, B21, B22, B78.1, B24, Z21. J'utilise le code ci-dessous -

gsub("[^0-9A-Za-z///' ]", "", x) 

Mais il retourne le mauvais résultat.

[1] "n 20  21  22 781  24   Z21  " 
+1

voulez-vous toutes les sous-chaînes qui sont au format ASCII aphanumérique? –

+0

oui, je veux toutes les sous-chaînes qui sont au format ASCII aphanumérique – john

Répondre

1

En utilisant stringr, vous pouvez utiliser str_extract_all avec ce regex

x = "nНозологические единицы \r\n В20 Болезнь, вызванная вирусом иммунодефицита человека [ВИЧ], проявляющаяся в виде \r\nинфекционных и паразитарных болезней \r\n В21 Болезнь, вызванная вирусом иммунодефицита человека [ВИЧ], проявляющаяся в виде \r\nзлокачественных новообразований \r\n В22 Болезнь, вызванная вирусом иммунодефицита человека [ВИЧ], проявляющаяся в виде \r\nдругих уточненных болезней \r\n В78.1 Болезнь, вызванная вирусом иммунодефицита человека [ВИЧ], проявляющаяся в виде \r\nдругих состояний \r\n В24 Болезнь, вызванная вирусом иммунодефицита человека [ВИЧ], неуточненная \r\n Z21 Бессимптомный инфекционный статус, вызванный вирусом иммунодефицита человека" 

stringr::str_extract_all(x, "[:alpha:][[:digit:]\\.]+") 
#> [[1]] 
#> [1] "В20" "В21" "В22" "В78.1" "В24" "Z21" 

A propos de la regex:

  • [:alpha:] signifie tout caractère lettre
  • [[:digit:]\\.] suivi d'un caractère numérique ou .
  • + précédent une ou plusieurs fois

Changez le regex quand ce que vous voulez pour extraire les changements

1

Voici une méthode base de R en utilisant gregexpr pour revenir positions et regmatches pour extraire des portions de texte correspondantes.

unlist(regmatches(x, gregexpr("[ВZ][27][[:digit:].]+", x))) 
[1] "В20" "В21" "В22" "В78.1" "В24" "Z21" 

Notez que le "B" n'est pas l'ascii standard "B". J'ai copié et collé un du vecteur pour que cela fonctionne. Vous pouvez le voir en utilisant utfToInt:

ascii "B":

utf8ToInt("B") 
[1] 66 

Le "B" dans x

utf8ToInt("В") 
[1] 1042