4

../some/thing/foobar/foobar.happening私はこのようなパスを持っていてcharacter、最後/..

これは一部の人にとっては簡単なことだと思いますが、正規表現などにはまだ慣れていません。おそらく を使用して自分でこれを行うこともできますがstrsplit、可能であればエレガントなワンライナーを探しています。

前もって感謝します!

4

2 に答える 2

7

basename最後のスラッシュの後の部分が表示されます。次に、ドットで分割できます(これは two でエスケープする必要があります\

> (name <- basename("../some/thing/foobar/foobar.happening"))
[1] "foobar.happening"
> unlist(strsplit(name, "\\."))
[1] "foobar"    "happening"

次に、最初の要素を選択します

> unlist(strsplit(name, "\\."))[1]
[1] "foobar"

私はあなたが実際に 以外の方法を求めているのを見ましたstrsplit. ここに正規表現があります

> sub(".*/([^/]+)\\..*", "\\1", "../some/thing/foobar/foobar.happening")
[1] "foobar"
  • 何かのゼロ回以上の出現を探します.*
  • スラッシュが続く/
  • スラッシュではないもの[^/](括弧内^は「not」を意味します) が 1 回以上続き+ます。
  • ドットが続く\\.
  • その後に 0 回以上何かが続きます.*

[^/]+次に、それを、スラッシュとドットの間のすべてである括弧内のものだけに置き換えます。は\\1、括弧の最初のセット内のものを意味します。(この場合、セットは 1 つしかありませんが、2 番目のセットがあれば、 で参照できます\\2)

于 2013-01-24T22:02:39.257 に答える