2017-10-07 98 views
1

我有俄语的字符矢量。请参阅下面的样本载体 -在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 Бессимптомный инфекционный статус, вызванный вирусом иммунодефицита человека" 

我想提取这些值 - B20,B21,B22,B78.1,B24,Z21。我正在使用下面的代码 -

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

但它返回了错误的结果。

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

你想要所有的ASCII字符串格式的子字符串吗? –

+0

是的,我希望所有的子字符串格式为ASCII字母数字 – john

回答

1

使用stringr,您可以使用str_extract_all用这个表达式

为此,可以使用 utfToInt
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" 

关于正则表达式:

  • [:alpha:]指任何字母字符
  • [[:digit:]\\.]后跟任何数字或.字符
  • +前一个或更多的时间

变化时,你想要的正则表达式提取变化

1

下面是使用gregexpr返回位置和regmatches提取文本的匹配部分的基R法。

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

请注意,“B”不是标准的ASCII“B”。我复制并粘贴了一个矢量来获得这个工作。

ASCII “B”:

utf8ToInt("B") 
[1] 66 

的 “B” 在X

utf8ToInt("В") 
[1] 1042