web-dev-qa-db-ja.com

最初のインスタンスでstrsplit

最初の「)」を取得して文字列を分割するstrsplitコマンドを作成したいと思います。

例えば:

f("12)34)56")
"12" "34)56"

私は他のいくつかの関連する正規表現SOの質問を読みましたが、私はこれの頭または尾を作ることができないのではないかと思います。助けてくれてありがとう。

20
Francis Smart

strsplitを使用して最初の一致を取得し、次にregexprの逆の結果を取得した場合、regmatchesの場合と同じリストタイプの結果を取得できます。

x <- "12)34)56"
regmatches(x, regexpr(")", x), invert = TRUE)
# [[1]]
# [1] "12"    "34)56"
16
Rich Scriven

スピードが必要ですか?次に、stringi関数に移動します。タイミングを参照してください。 here

library(stringi)
x <- "12)34)56"
stri_split_fixed(str = x, pattern = ")", n = 2)
8
Henrik

文字がどこにあるかを識別してから、その両側に部分文字列を付ける方が安全な場合があります。

x <- "12)34)56"
spl <- regexpr(")",x)
substring(x,c(1,spl+1),c(spl-1,nchar(x)))
#[1] "12"    "34)56"
6
thelatemail

別のオプションは、パッケージstringrstr_splitを使用することです。

library(stringr)
f <- function(string)
{
  unlist(str_split(string,"\\)",n=2))
}
> f("12)34)56")
[1] "12"    "34)56"
3
nrussell

最初の(を印刷されない文字"\01"に置き換えてから、その上でstrsplitします。 "\01"の代わりに、表示されない限り、任意の文字を使用できます。

strsplit(sub(")", "\01", "12)34)56"), "\01")
2
G. Grothendieck