2017-08-11 4 views
1

私はRails 5を使用しています。任意の数値の文字列、オプションのスペース数、文字列の配列からのトークン、オプティナルなスペース数、および任意の数の数字の文字列を置き換えたい。したがって、たとえば、これは文字列から正規表現を選択するように指示するにはどうすればよいですか?

123/2221111 

またはこの

102849/222 

....私のパターンにマッチしますので、私は私の正規表現は

re = /\d+[[:space:]]*[#{Regexp.union(TOKENS)}][[:space:]]*\d+/ 

あるべきと思ったけど、次は何かをマッチングされますそれは基準に合わない...

2.4.0 :015 > re = /\d+[[:space:]]*[#{Regexp.union(TOKENS)}][[:space:]]*\d+/ 
=> /\d+[[:space:]]*[(?-mix:of|\/)][[:space:]]*\d+/ 
2.4.0 :016 > TOKENS 
=> ["of", "/"] 
2.4.0 :017 > name = "10F 2017" 
=> "10F 2017" 
2.4.0 :018 > name.gsub!(re, '#') 
=> "#" 

文字列 "10F 2017"にはTOKENS配列の文字列が含まれていないため、正しく機能しません。どのように正規表現を書き直して、自分が望むものと一致するようにするのですか?など(?からmまでの文字、i?m試合の間の範囲:文字クラスに#{Regexp.union(TOKENS)}を囲むことで

+0

デイブを参照してください、 '[(-Mix:の| \ /?)]'単一文字と一致します( ''、 '?'から 'm 'までの範囲(すなわち多くの文字、すべてのASCII大文字のもの)、' i'など。 '['と ']'を削除します。 –

答えて

2

[(?-mix:of|\/)]、あなたはそれが単一文字と一致して作られた

enter image description here

と見what parts of the string each part of your regex matches

enter image description here

したがって、[(?-mix:of|\/)]は入力文字列にFと一致しています。

あなたが[]を削除する必要があります。

re = /\d+[[:space:]]*#{Regexp.union(TOKENS)}[[:space:]]*\d+/ 

Ruby demo

関連する問題