0

次のような文字列がたくさんあります。

str = 'CA3 03223-DG 0101-CA2 0101-CA1 0101 pyramidal cells c (PC-c)'

つまり、「CA3 03223」のようにハイフンで区切られた先頭の文字列がたくさんあり、その後にいくつかの単語が続きます(上記の例では「錐体細胞c(PC-c)」。1行ですべてを収集したいから削除する際に、ハイフンで区切られた先頭の部分を配列にまとめますstr。この行の最後に、次のような配列が必要です。

['CA3 03223', 'DG 0101', 'CA2 0101', 'CA1 0101']

そして、str次のようになります。

'pyramidal cells c (PC-c)'

私の現在の解決策は次のとおりです。

myarray = []; match = ''
myarray << match.strip[0..-2] while (match = str.slice!(/[A-Z0-9]{2,3} \d{3,}[\-\s]/))

むしろ醜い、私は知っています。これを1つの妥当な長さの行に短縮するにはどうすればよいですか?String#scan見つかった一致を削除するようなものを探しています。

4

1 に答える 1

1

次のようなものがおそらく最もクリーンです。

myarray, str = str.scan(re), str.gsub(re, '')

ワンライナーが必要な場合は正規表現をインラインに移動できますが、私はそうしません

于 2012-06-24T03:21:59.910 に答える