2014-04-14 65 views
1

我想通過多個正則表達式參數的部分字符串需要被替換。這裏的字符串:紅寶石正則表達式與報價

str = "stands in hall "Let's go get to first period everyone" Students continue moving to seats." 

這裏是期望的字符串:

str = "stands in hall "Let's go get to first period everyone" Students continue moving to seats." 

這是我的嘗試:

str.gsub(/'|"/, "'" => "\'", """ => "\"") 

這是我得到:

"stands in hall \"Let's go get to first period everyone\" Students continue moving to seats." 

如何在發送時獲取報價使用gsub的兩個正則表達式參數?

+3

你有在替換哈希中的&#x27'之後忘記了分號。 –

+0

@CasimiretHippolyte謝謝,我得到了這個詞讓我們現在用撇號,但我仍然得到反斜槓。當我取出反斜槓並執行此操作時,'"「=>」「」'在irb渲染中沒有任何內容,我將在上面進行編輯以防止在 – gary1410

+0

上進一步發生混淆更新後的版本是正確的。代碼行是它是一個[轉義序列](http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Escape_sequences),所以你不會錯誤地認爲第一個斜槓用於終止字符串。嘗試設置'str1 = str.gsub(/ ' | " /,「'」=>「\'」,「"」=>「\」「)',然後執行'puts str1',您會看到斜槓是不見了。 – mralexlau

回答

0

因爲我不明白轉義字符我找到一個替代的解決方案,可能是「軌通」

你可以使用<%= raw 'some_html' %>

我的最終解決方案最終被這個,而不是凌亂的正則表達式,並要求CGI

<%= raw evidence_score.description %>

Unescaping HTML string in Rails

+0

你沒有給任何人任何線索,這是Rails。下一次你可能想標記它並在問題中提到它。 –

1

這是一個HTML無法解決的問題。

require 'cgi' 
CGI.unescape_html(str) 

這給你正確的答案。

+0

這是更好的解決方案,因爲正則表達式和效率非常低,我會使用這個解決方案,但我不知道如何從一個循環中傳遞字符串,我在我的視圖中運行,看起來像這樣'<%@indicator_score .evidence_scores.each do | evidence_score | %>''<%= evidence_score.description%>'在這種情況下,description是字符串。我會盡力鼓搗這個解決方案。 – gary1410

0

從我在這個問題上的意見:

你更新後的版本是正確的。斜槓在您的最後一行代碼中的唯一原因是它是escape sequence,因此您不會錯誤地認爲第一個斜槓用於終止字符串。試試你的分配輸出進行打印:

str1 = str.gsub(/&#x27;|&quot;/, "&#x27;" => "\'", "&quot;" => "\"") 
puts str1 

,你會看到,當str1使用puts印刷斜線都不見了。

區別在於,自動評估irb中的變量(我假設您正在執行此示例代碼)會自動調用inspect方法,該方法對於字符串變量顯示整個字符串。