2016-09-14 73 views
1

喜正則表達式拆分我需要寫有以下邏輯正則表達式:在每第二個逗號在第二個逗號

拆分,除非該字符「\」是逗號之前。

也許一個例子,以明確:

1,1a,2,2a,3,3a\,b,4,4a 

應該得到的結果是:

1,1A

2,2A

3,3A \,B

4,4a

這是我下面的代碼:

SELECT REGEXP_SUBSTR (text, '[^,]+,[^,]+', 1, LEVEL) TXT 
FROM DUAL 
CONNECT BY REGEXP_SUBSTR (text, '[^,]+,[^,]+', 1, LEVEL) IS NOT NULL; 

所以我此刻正則表達式是:'[^,]+,[^,]+'其分裂每隔一個逗號。

+0

我只是跑你的查詢時,它看起來好像沒什麼問題..有什麼問題?爲什麼'3,3a \,b'需要3個逗號而不是2? – sagi

+0

看起來\是oracle中的轉義字符。你需要改變你的字符串爲'1,1a,2,2a,3,3a \\,b,4,4a' – dinesh

+0

@sagi因爲這也可以是像「Test \,Test2」這樣的文本。 \是逗號前的字符,這個逗號應該被忽略。 – ZerOne

回答

1

嘗試(\\,|[^,])+而不是純[^,]+

+0

謝謝你完美的作品!我的正則表達式現在是:'(\\,| [^,])+,(\\,| [^,])+' – ZerOne

+0

僅供參考 - @ZerOne請確保您總是用逗號分隔,否則您會得到不正確的結果。即如果你在兩個1之間插入額外的逗號,結果將是錯誤的。這可能不是一個問題,這取決於你的數據是如何被清理的。只是讓你意識到可能的警告,因爲通常用於解析列表的正則表達式格式「[^,] +」不處理NULL元素。有關更多信息,請參閱http://stackoverflow.com/a/31464699/2543416。 –