2017-10-07 83 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