2012-12-08 22 views
1

我刪除了連接到一個url中的樂隊名稱的初始「The」和空格。 我有這個,但它很醜,我想合併成一個表達式。我該如何鞏固這個表情?

@artist.sub!(/[Tt]he/, '') 
@artist.gsub!(/\s+/, '') 
+0

爲什麼一定要在一個正則表達式?這隻會導致更難以維護的更復雜的模式。 –

回答

3

嘗試:

@artist.gsub!(/(\A[Tt]he)|(\s+)/, '') 
+0

這將擺脫表達中的「the」。 –

+0

@EricWalker:沒錯,但是沒有辦法鞏固,只有這樣做才能做到這一點。 – Linuxios

+0

@EricWalker:已修復。 – Linuxios

3

當然,你可以鏈#sub#gsub表達;例如,

@artist = @artist.sub(/^[Tt]he/, '').gsub(/\s+/, '') 

任何更緊湊,我會毫不猶豫地把它優雅—只是聰明的(和不明確)。

請注意使用#sub#gsub而不是#sub!#gsub!。 Per @ pguardiario的評論,如果沒有匹配,第二個將返回nil,導致NoMethodError異常。另外請注意,這有一個錨點來防止從字符串中間刪除「The」。

如果你正在嘗試創建一個在URLs中使用的slu you,你最好用一個庫中的方法。

+1

+1爲更可維護的方法。如果OP使用單個空格替換空格,我可能不會使用'\ s',而是使用''''或者切換到'squeeze('')'。 –

+1

小心,如果沒有匹配,sub!'返回nil。還包括界限,否則你會遇到麻煩。 – pguardiario

+0

@pguardiario:出色的觀察。 –

1

我會去用:

@artist = @artist.sub(/\Athe\b/i, '').strip 
+0

你需要一些東西來擺脫空白(OP的問題中的第二行)。 –

+0

@Eric Walker - 'strip'將刪除最初的空格。 – pguardiario

+0

對或錯,他也在中間空白。 –