2016-11-30 5 views
1

私は、この「いくつかのテキスト!11.22.33」のような文字列をしたと私は文字列をパターンで分割するには?

"some text !11.22.33".scan(/!(\w+)/)[0].join.to_s 

を呼び出したときにそれが唯一の「11」を返します。 "11.22.33"を返したいので、スキャン機能はドットをスキップしてすべての文字列を取ります。どのように私はそれを行うことができますか?

答えて

1

あなたの文字列が、この形式で常にある場合は、単に正規表現のアプローチについて

"some text !11.22.33".partition('!').last 

を使用するには、キャプチャとのマッチングを使用することができます:

"some text !11.22.33"[/!([\d.]+)/, 1] 

Ruby demo

詳細を参照してください。

  • ! - リテラル!シンボル
  • ([\d.]+) - キャプチャグループ1:1桁以上の数字またはドット
  • 1引数が出力するルビーを伝えるのみキャプチャ値

別の正規表現は、/!(\d+(?:\.\d+)*)/すなわち1桁以上をキャプチャし、次に.と1+桁の0以上のシーケンスをキャプチャします(したがって、末尾のドットがある場合はキャプチャされません)。

+0

素晴らしい!どうもありがとうございます! – ValeMarz

+0

数字とドットが常に文字列の最後にある既知の形式の場合、 'partition'の代わりに' rpartition'を使用することができます: '' some text!11.22.33 ".rpartition( '!')。last' –