在 R 中查找字母数字

Finding alphanumeric in 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       "

这是一个基本的 R 方法,使用 gregexpr 到 return 个位置和 regmatches 来提取文本的匹配部分。

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

请注意 "B" 不是标准的 ascii "B"。我从向量中复制并粘贴了一个来让它工作。您可以使用 utfToInt:

来查看

ascii "B":

utf8ToInt("B")
[1] 66

x"B"中的

utf8ToInt("В")
[1] 1042

使用 stringr,您可以将 str_extract_all 与此正则表达式一起使用

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:]\.] 后跟任何数字或 . 字符
  • + 前一次或多次

当您想提取的内容发生变化时更改正则表达式