5

Rubyで正規表現を使用して文字列内の同じ数字のすべてをキャッチすることは可能ですか?私は正規表現に精通していません。

つまり、正規表現"1112234444"は生成されます["111", "22", "3", "4444"]

私は知っています、私は使うことができます(\d)(\1*)、しかしそれは私に各試合で2つのグループしか与えません。["1", "11"], ["2", "2"], ["3", -], ["4", "444"]

各試合で1つのグループを取得するにはどうすればよいですか?ありがとう。

4

3 に答える 3

8

ここで、これを試してみてください。

((\d)\2*)
于 2012-10-19T11:55:08.653 に答える
5

この正規表現を使用できます

((\d)\2*)

グループ1はあなたの必要な価値をキャッチします

于 2012-10-19T11:56:27.597 に答える
1

私の最初の簡単な答えは、コードの説明がないことで正当に批判されました。だからここに別のものがあります、すべての点でより良いです;-)

実行したい要素が数字であり、手作業で簡単に列挙できるという事実を利用しています。したがって、「ゼロの実行、または1の実行、...または9の実行」を意味する読み取り可能な正規表現を作成します。そして、ジョブに適切なメソッドString#scanを使用します。

irb> "1112234444".scan(/0+|1+|2+|3+|4+|5+|6+|7+|8+|9+/)
=> ["111", "22", "3", "4444"]

記録のために、これが私の最初の答えです:

irb> s = "1112234444"
=> "1112234444"
irb> rx = /(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)/
=> /(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)/
irb> s.split(rx).reject(&:empty?)
=> ["111", "22", "3", "4444"]
于 2012-10-19T12:03:00.447 に答える