2012-04-13 107 views
0

是否有使用通配符來定義以下的方式:某些字符不能用逗號替換字符嗎?

我想一個"\"來之前和一個逗號後,當一個逗號沒有之前或之後包含"\""

我有點不確定如何做否定。

編輯樣品數據:

"col1,col2,col3" 

應該成爲

"\"col1\",\"col2\",\"col3\"" 

其中 「\」」只是意味着一個引號字符串

+0

請顯示一些示例輸入和輸出數據。 – 2012-04-13 09:36:12

+0

這不是全部的事實。請在第二部分的要求中顯示樣本數據:*當逗號字符在其之前或之後不包含「\」「* – 2012-04-13 09:44:58

+0

我的錯誤,現在編輯 – mezamorphic 2012-04-13 09:58:51

回答

0

使用正則表達式或簡單的更換:

string s = "col1,col2\",\"col3"; 
// replace all existing quotes and replace all commas with escaped characters again 
string r = s.Replace('\"','').Replace(",","\",\""); 
// r = "col1\",\"col2\",\"col3" 

但這並不做什麼你的樣本數據是這樣的:

"col1,col2,col3" should become "col1\",\"col2\",\"col3\"" 

這不是按照你的規則(看後\"!)。也許你想包裹所有的col,所以你可以在開始和結束時添加一個\"。 (假設分隔符永遠只是,,不包括空格)

+0

對不起,我錯過了開始時的報價,是的我也編輯了我的問題 – mezamorphic 2012-04-13 09:56:34

+0

然後只是在開頭和結尾添加「你應該得到你想要的:-) – Matten 2012-04-13 09:58:09

+0

我不認爲你可以使用這個,因爲第二個替換將模式匹配逗號,即使這個逗號在它之前已經有了一個引號。你最終會報價,報價,逗號,報價? – mezamorphic 2012-04-13 10:09:53

0

更換匹配的一切如下:^(\\\"),^(\\\")有:\",\"

這意味着什麼,但一個反斜槓後跟一個引號,後跟一個逗號,後跟除反斜槓後面加上引號外的任何內容。

+0

這是絕對正確的,因爲它不會編譯,你是否在某處丟失了引號? – mezamorphic 2012-04-13 09:58:29

+0

可能,沒有自己測試。剛剛給了我用Java構建的一般的正則表達式...應該知道引用仍然是一個問題。在這兩個組中都將它變成(\\\「),並在組之前使^,否則將會出錯......現在編輯 – MarioDS 2012-04-13 10:15:58

+0

Regex.Replace(Line,」^(\\\「 ),^(\\\「)」,「\」,\「」)似乎不起作用?(道歉,如果我在錯誤的地方插入引號) – mezamorphic 2012-04-13 10:27:14

0

使用「負看看後面」斷言:

(?<!\\), 

不能給你一個更好的答案,而無需樣品輸入/輸出。

0

嘗試(?<!\"),(?!\"),這就是所謂Zero-Width Assertions

我現在很忙,後來解釋,遺憾的是。

+0

你的意思是?Regex.Replace(Line,「(?<!\」)「,」(?!\「)」)? – mezamorphic 2012-04-13 10:24:32

0

我知道這個線程是有點老,但新參觀這也可以做到:

string sample = "col1,col2,col3" 
string result = sample.Replace("""",""); 
result = "\"" + result.replace(",","\",\"") + "\"" 

希望它能幫助!