Rの正規表現にはかなり新しく、いくつかのパターンを含む文字列のベクトルと一致させようとしています。私はstackoverflowで検索し、それは類似の質問は尋ねられていないようだ。ここに一致する文字列mystring
のベクトルがあります。このmystring
でPCREを使用したRの正規表現での複数の一致と複数除外
mystring <- c("fhwjantdesd", "unwanted", "fdedsifrfed", "undesired", "sdsyessd", "yedsfd")
私はmystring
は、文字列を除いた「望んでいた」「指名手配」の6文字の任意の順列が含まれるかどうかを把握したいです。同様に、文字列 "desired"と "yes"を除いて、 "desired"の7文字と "yes"の3文字の順列を含みます。
のでgrepl(pattern, mystring, perl = TRUE)
の予想される出力は次のようになります。
[1] TRUE, FALSE, TRUE, FALSE, FALSE, TRUE
私は機能をスピードアップすることができgreplのperl
オプションを使用します。誰もがこのpattern
にいくつかの手掛かりを提供できますか?パターンの各部分は、私がPCREを使用する上での出発点に過ぎないため、何を説明することができますか?あなたは、コード以下は、この
mystring <- c("fhwjantdesd", "unwanted", "fdedsifrfed", "undesired", "sdsyessd", "yedsfd")
Status <- NULL
str <- c("wanted", "desired", "yes")
index <- 1
for (i in mystring) {
for (j in str) {
char_length <- nchar(j)
if (is.na(str_extract(string = i, pattern = j)) | str_extract(string = i, pattern = j) == F) {
if (sum(unlist(strsplit(j, "")) %in% unlist(strsplit(i, ""))) >= char_length) {
Status[index] <- T
break
}
}
}
if (is.na(Status[index])) {
Status[index] = F
}
index <- index + 1
}
Status
> Status
[1] TRUE FALSE TRUE FALSE FALSE TRUE
Re *私はgreplの 'perl'オプションを使いたいと思います。これは関数の速度を上げる可能性があります*"、それは遅くなる可能性もあります。 – ikegami
これで問題は解決しますか? –
@Hardikguptaあなたの答えはHardikに感謝します。それは私の問題を解決することができます。しかし、私はperlオプション付きの 'grepl()'答えがあるのだろうかと思っています。誰かがそのような答えを与えることができるのを待ってみましょう。 –