5
word:12335
anotherword:2323434
totallydifferentword/455
word/32

:または/ベースR関数のみを使用する前に文字列を取得する必要があります。私はこれを使用してこれを行うことができますstringrが、パッケージに別の依存関係を追加したくありません。単語の文字数は可変ですが、常に区切り文字(の1つ)で終わります。後に続くものを保持する必要はありません。

4

4 に答える 4

3

多分試してみてください:

x <- c("word:12335", "anotherword:2323434", "totallydifferentword/455", "word/32")
lapply(strsplit(x, ":|/"), function(z) z[[1]]) #as a list
sapply(strsplit(x, ":|/"), function(z) z[[1]]) #as a string

それでも機能する正規表現ソリューションがありますgsubが、同様の問題の私の経験では、strsplit雄弁ではありませんが、より速くなります。

この正規表現も機能すると思います。

gsub("([a-z]+)([/|:])([0-9]+)", "\\1", x)

この場合、gsubの方が高速でした。

Unit: microseconds
        expr    min     lq median     uq     max
1     GSUB() 19.127 21.460 22.392 23.792 106.362
2 STRSPLIT() 46.650 50.849 53.182 54.581 854.162
于 2012-10-02T16:22:49.997 に答える
2

このようなものは、 Rubyhttp://rubular.com/r/PzVQVIpKPqでトリックを実行します

^(\w+)(?:[:\/])

文字列の先頭から始めて、任意の単語文字を取得し、キャプチャされていない文字またはキャプチャされていない文字に到達するまでキャプチャします/:

于 2012-10-02T16:22:52.857 に答える
0

この正規表現は機能しているようです。Rで使えますか?

于 2012-10-02T16:21:10.813 に答える
0

パッケージunglueを使用できます:

library(unglue)
x <- c("word:12335", "anotherword:2323434", "totallydifferentword/455", "word/32")
unglue_vec(x, "{res}{=[:/].*?}")
#> [1] "word"                 "anotherword"          "totallydifferentword"
#> [4] "word"

reprexパッケージ(v0.3.0)によって2019-10-08に作成されました

  • {res}何にでも一致し、返されます、それはと同等です{res=.*?}
  • {=[:/].*?}:またはで始まるものに一致し/、lhsがないため返されません=
于 2019-10-08T21:32:57.337 に答える