首先,您需要注意gsub
和gsub!
。後者是「危險的!」並將修改src
的值。如果您按順序執行這些語句,請注意a.gsub!(/a/, "b")
和a = a.gsub(/a/, "b")
都會對a
執行相同的操作。代碼的一部分問題是src
正在被修改。
在B方法返回"his"
,但不更改source
src[/([a-z]+)/] # => "his"
src # => "This Is A 101 Test"
的C法去除了不數字的所有字符:
src.gsub!(/\D/, "") # => "101"
src # => "101"
的d方法不起作用因爲語法是錯誤的。 gsub
方法接受正則表達式/字符串進行搜索,然後接受用於替換的字符串。如果你在IRB中嘗試它,它會表現得好像你需要另一個/
。
電子方法代替所有非單詞字符和所有數字:
src.gsub(/(\W|\d)/, "") # => "This Is A Test" (note the two spaces)
src # => "This Is A 101 Test"
您指出的是,它的返回""
。那麼,實際發生的事情是,C和D列出(與語法問題解決)是破壞性更改。 (另外,如果在"101"
運行,d實際上將返回nil
作爲不可替代的進行。)所以E的只是被上"101"
運行,因爲你與""
替換所有非詞和所有數字,它成爲"101"
。
你正在尋找的答案會是這樣的:
src.gsub!(/\d\s?/, "") # => "This Is A Test"
src # => "This Is A Test"
而且我的雙空格所有情況的處理(因爲squeeze
是相當有效率在合併同類角色的喜愛,strip
是在去除尾隨空白相當有效率,而那些!
回報nil
,如果他們不作任何更換):
src = src.gsub(/\d+/, "").squeeze(" ").strip
現貨。謝謝! – 2012-02-02 16:08:09