Rでの、文字列の抽出/切り出し、検出について、いろいろと試してまとめてみた。 主に、baseやstringrのパッケージを扱った。
関連パッケージをロードする
library(stringr) library(readr)
文字列の抽出/切り出しについて
stringr::str_extract
関数、stringr::str_extract_all
関数では、
文字列から一致するパターンを抽出して、ベクトルで結果を返す。
str_extractとstr_extract_allとで、少し挙動が違うみたいである。
以下に、テストデータでの実行例を示す。
#テストデータの読み込んで、unlistにする Dat <- unlist(data.frame(readr::read_tsv(file="https://raw.githubusercontent.com/kumeS/Blog/master/TXT_proc/test.txt", col_names=F, show_col_types = FALSE)), use.names = F) #最初の部分を表示する Dat #[1] "abc ABC abc" "ABC abc ABC" "def DEF def" "DEF def DEF" "abc.ABC.abc" #[6] "ABC.abc.ABC" #abcが含まれる部分を要素ごとに抽出する stringr::str_extract(string=Dat, pattern="abc") #[1] "abc" "abc" NA NA "abc" "abc" #abcが含まれる部分をすべて抽出する stringr::str_extract_all(string=Dat, pattern="abc") #[[1]] #[1] "abc" "abc" # #[[2]] #[1] "abc" # #[[3]] #character(0) # #[[4]] #character(0) # #[[5]] #[1] "abc" "abc" # #[[6]] #[1] "abc"
文字数指定で、文字列を抽出する
base::substr
あるいはstringr::str_sub
を使って、
文字ベクトルの部分文字列を文字数指定で抽出する。
#任意の文字列 Moji <- "abcdefghij" #文字数のカウント nchar(Moji) #[1] 10 #substr関数で、1から3文字目までを抽出する base::substr(Moji, start=1, stop=3) #[1] "abc" #substr関数で、4から6文字目までを抽出する base::substr(Moji, start=4, stop=6) #[1] "def" #次に、str_sub関数で、1から3文字目までを抽出する stringr::str_sub(Moji, start=1, end=3) #[1] "abc" #str_sub関数で、4から6文字目までを抽出する stringr::str_sub(Moji, start=4, end=6) #[1] "def" #str_sub関数で、1文字目から、後ろから3文字目までを抽出する stringr::str_sub(Moji, start=1, end=-3) #[1] "abcdefgh" #str_sub関数で、4文字目から最後の文字までを抽出する stringr::str_sub(Moji, start=4, end=-1) #[1] "defghij"
stringr::str_sub
関数では、
マイナス付きで、startあるいはendを指定すると、
後ろから何文字目かを指定できる。
文字列の検出
stringr::str_detect
関数は、
文字列の中のパターンの有無を検出する。
#そのパターンが含まれるかどうかを、TRUE/FALSEで返す stringr::str_detect(string=Dat, pattern="abc") #[1] TRUE TRUE FALSE FALSE TRUE TRUE #パターンが含まれた場合には、FALSEで返す (negate = TRUE) stringr::str_detect(string=Dat, pattern="abc", negate = TRUE) #[1] FALSE FALSE TRUE TRUE FALSE FALSE