問題

私は本当に正規表現を学ぶ時間を置いており、私はさまざまなおもちゃのシナリオで遊んでいます。私が働くことができない1つのセットアップは、文字列の先頭からn> 1の文字が出現することです。

ここでは、文字列の先頭から最初のアンダースコアまで取得できますが、これを2番目または3番目のアンダースコアに一般化することはできません。

 x <- c("a_b_c_d", "1_2_3_4", "<_?_._:")

gsub("_.*$", "", x)

Here's what I'm trying to achieve with regex. (`sub`/`gsub`):

## > sapply(lapply(strsplit(x, "_"), "[", 1:2), paste, collapse="_")
## [1] "a_b" "1_2" "<_?"

#or

## > sapply(lapply(strsplit(x, "_"), "[", 1:3), paste, collapse="_")
## [1] "a_b_c" "1_2_3" "<_?_."
 

関連する投稿:文字列の最初の文字から最後までの正規表現

  ベストアンサー

どのように:

 gsub('^(.+_.+?).*$', '\1', x)
# [1] "a_b" "1_2" "<_?"
 

あるいは、{}を使用して繰り返しの数を示すこともできます...

 sub('((.+_){1}.+?).*$', '\1', x)  # {0} will give "a", {1} - "a_b", {2} - "a_b_c" and so on
 

n番目のものと一致させたいなら

  同じタグがついた質問を見る

regexr