2011-11-22 134 views
3

這裏麪人物的每一次出現是我的字符串:紅寶石正則表達式 - 需要更換正則表達式匹配

mystring = %Q{object1="this is, a testyay', asdkf'asfkd", object2="yo ho', ho"}

我要拆分的逗號mystring,所以我想(臨時)分出來的逗號介於逃脫的引號之間。

所以,我需要匹配轉義引號+某些字符+一個或多個逗號+轉義引號,然後gsub逗號在匹配的字符串中。

的正則表達式GSUB我想出了爲/(".*?),(.*?")/,我用它像這樣: newstring = mystring.gsub(/(".*?),(.*?")/ , "\\1|TEMPSUBSTITUTESTRING|\\2"),但這只是取代它的轉義引號之間找到第一個逗號。

我怎樣才能讓它取代所有的逗號?

謝謝。

+1

'require'csv'; CSV.parse(mystring)',你不需要麻煩的正則表達式。 – steenslag

+0

http://rubular.com/是修飾你表情的好地方。 – slothbear

回答

2

我相信這是實現你想要的結果的一種方法。

newstring = mystring.gsub(/".*?,.*?"/) {|s| s.gsub(",", "|TEMPSUBSTITUTESTRING|") } 

它將匹配的字符串(帶引號的部分)傳遞給代碼塊,然後替換所有逗號的出現。最初的正則表達式可能是/".*?"/,但它可能效率較低,因爲即使它沒有逗號,也會爲每個帶引號的字符串調用代碼塊。

1

不要與所有的麻煩,只是在這個表達式拆分mystring

,(?=(?:[^"]*"[^"]*")*[^"]*$) 

先行斷言,逗號後面是偶數的報價,這意味着它不是內報價值。