Reputation: 1036
I have character vector in russian language. See the sample vector below -
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 Бессимптомный инфекционный статус, вызванный вирусом иммунодефицита человека"
I want to extract these values - B20, B21, B22, B78.1, B24, Z21. I am using the code below -
gsub("[^0-9A-Za-z///' ]", "", x)
But it is returning the wrong result.
[1] "n 20 21 22 781 24 Z21 "
Upvotes: 1
Views: 46
Reputation: 6542
Using stringr
, you can use str_extract_all
with this 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"
About the regex:
[:alpha:]
means any letter character[[:digit:]\\.]
followed by any numeric or .
character+
the previous one or more timeChange the regex when what you want to extract changes
Upvotes: 1
Reputation: 38510
Here is a base R method using gregexpr
to return positions and regmatches
to extract matching portions of text.
unlist(regmatches(x, gregexpr("[ВZ][27][[:digit:].]+", x)))
[1] "В20" "В21" "В22" "В78.1" "В24" "Z21"
Note that the "B" is not the standard ascii "B". I copied and pasted one from the vector to get this to work. You can see this using utfToInt
:
ascii "B":
utf8ToInt("B")
[1] 66
The "B" in x
utf8ToInt("В")
[1] 1042
Upvotes: 1