2012-03-14 10 views
3

空白、数字などを除くすべての文字列を文字列から削除するにはどうすればよいですか?このような 何か:Rubyはいくつかの文字を除くすべてを削除しますか?

oneLine.gsub(/[^ULDR0-9\<\>\s]/i,'') 

私は必要があります:0-9 l d u r < > <space>

はまた、Rubyで正規表現の使用についての良い文書では例と特殊文字のリストのように、あるのでしょうか?

+0

http://rubular.comはあなたが探しているものである必要があります。 –

+0

@Michael:正規表現はすでに動作しているので、これは役に立ちません。期待通りに動作しないのは、ここでどのように適用されるかです。 –

+0

私は最後の文を参照していました。 Rubularには、Rubyの正規表現についての簡潔な説明があります。さらに、それらを試してみる機会もあります。 –

答えて

7

正規表現は正しく動作しています。ただし、操作している文字列に結果を戻す必要があります。それ以外の場合は、文字列を変更していません(.gsub()は文字列のインプレースを変更しません)。

正規表現を少し増やすには、「+」量子を追加します(連続した文字を1回で置き換えることができます)。また、あなたは山括弧をエスケープする必要はありません。

oneLine = oneLine.gsub(/[^ULDR0-9<>\s]+/i, '') 

Rubyの正規表現の特別な配慮との良好なリソースヤンGoyvaertsとスティーブンLevithanでRegular Expressions Cookbookです。同じ著者による良いオンラインチュートリアルはhereです。ただ、完全性について

2

:あなたは、この特定のタスクのための正規表現を必要としない、これはsimple string manipulationを使用して行うことができます。

irb(main):005:0> "asdasd123".tr('^ULDRuldr0-9<>\t\r\n ', '') 
=> "dd123" 

古い値を置き換える場合もtr!方法があります:

irb(main):009:0> oneLine = 'UasdL asd 123' 
irb(main):010:0> oneLine.tr!('^ULDRuldr0-9<>\t\r\n ', '') 
irb(main):011:0> oneLine 
=> "UdL d 123" 

これは、同様に少し速くする必要があります(ただし、パフォーマンスはRubyで大きな問題ではありません:)

+0

'd 'は文字列に残るはずです。 '.tr()'で大文字と小文字を区別させる方法はありますか? –

+0

@TimPietzcker:はい、私は気づきました。文字の両方のバージョンをハードコーディングする以外は、組み込みの方法はないと思います。 –

+0

"Rubyではパフォーマンスは大きな問題ではありません。"なぜなら、通常はルビーは高性能アプリで使われていないからですか? – Steven

4

グーd String#deleteはこれを正規表現なしで行います。 ^は「NOT」を意味します。

str = "12eldabc8urp pp" 
p str.delete('^0-9ldur<> ') #=> "12ld8ur " 
+0

これは私に最も感謝してくれた答えです。 –

関連する問題