2017-11-04 5 views
0

(カッコを使用して)グループの束を持つ正規表現がある場合、そのうちのいくつかはオプションです(疑問符を使用)。正規表現にマッチしたグループの数はどのようにして求められますか? Pythonにはgroups()という関数がありますが、これはRubyでどのようにしていますか?Rubyでマッチしたグループの数は?

m = /\d{2}(:\d{2}(:\d{2})?)?/.match('10') # I want to return 1 
m = /\d{2}(:\d{2}(:\d{2})?)?/.match('10:30') # I want to return 2 
m = /\d{2}(:\d{2}(:\d{2})?)?/.match('10:30:20') # I want to return 3 
+0

lengthメソッドが利用可能https://ruby-doc.org/core-2.2.0/MatchData.html – CAustin

+1

実際には、おそらくあなたが探しているのは 'キャプチャ'メソッドです。 – CAustin

答えて

2

MatchDataは#size#length方法を持っていますが、彼らは同様に、空のグループをカウントし、すべての3例になります3を返します。

だから、唯一の解決策は、あなたがそうのようなArray#compactを使用することができ、次の

/\d{2}(:\d{2}(:\d{2})?)?/.match('10').to_a.compact.count 
+2

'compact 'を使って' nil'を取り除くことができます。 –

+0

@ sagarpandya82ええ、ありがとう –

1

のようなものであるようだ: `match`メソッドは`持つMatchDataオブジェクトを返し

/\d{2}(:\d{2}(:\d{2})?)?/.match('10').to_a.compact 
関連する問題