0

複数のワイルドカード (または誰かがよく知っている場合は他の方法) を使用して、文字列の配列内の複数の文字を置き換える方法を見つけようとしています。配列内の各要素は、電話番号と日付です (例: 8675309,2015- 01-20)。配列の各要素が電話番号のみになるように、コンマと日付のみを削除しようとしています

.gsub!配列内の各要素を反復処理するとき、各要素を1 文字置換するときに呼び出すことで、期待どおりの結果が得られました。

file_data = ["8675309,2015-01-20"]
puts file_data[0] #=> 8675309,2015-01-20
file_data.each do |s|
    s.gsub!(/0/, "X")
end
puts file_data[0] #> 86753X9,2X15-X1-2X

カンマと日付を削除するために、単純にワイルドカードを使用してs.gsub!(",****/**/**", ""). 次に、これは予期しない結果を示しています。

file_data = ["8675309,2015-01-20"]
file_data.each do |s|
    s.gsub!(/,****-**-**/, "")
end
puts file_data[0] #> 8675309,2015-01-20

他のスレッドで提案されている他のワイルドカード文字 (「. 」および「^」) もいくつか試しましたが、結果は変わりませんでした。

プライマリ番号をそのままにして、各要素のコンマと日付を削除する方法がわかりません。私.gsub!は適切な方法だと思っていましたが、他の方法も受け入れています。どんな助けでも大歓迎です。

4

3 に答える 3

1

ワイルドカードの扱い方が過剰です。サブしたいものがわかっているのに、なぜワイルドカードを使用するのですか? コンマと日付の削除は (日付が常に同じ形式である限り) 簡単です。

name = "8675309,2015-01-20"
name.gsub!(/,\d{4}-\d{2}-\d{2}/,"")
于 2015-01-20T21:13:54.990 に答える
0

使用するString#partition

name.partition(',')[0]

=>"8675309"
于 2015-01-21T14:54:35.587 に答える