2012-04-10 208 views
2

我想知道如何用數組括號內的,字符替換另一個字符,如.。字符串表達式我有低於:用C#替換字符串中的字符正則表達式

屬性[ 「412324 - PENNDOT I-95」, 「種類」]值,屬性[ 「412324 - PENNDOT I-95」, 「種類」]代碼

預期輸出應該是:

屬性[ 「412324 - PENNDOT I-95」。 「Category」]。Value,Attributes [「412324 - PENNDOT I-95」。 「分類」]代碼

+2

您是否嘗試過任何東西?發佈一些你迄今爲止嘗試過的代碼。 – 2012-04-10 05:25:49

+0

是的,我試過了,它的工作原理。 – 2012-04-10 16:22:53

回答

4
var regex = new Regex(@"(?<=\[[^\[\]]*),(?=[^\[\]]*\])"); 
return regex.Replace(<your sample string>, "."); 

在正則表達式模式,到,的左側爲正回顧後零寬度斷言,這意味着必須有一個[然後零個或多個既不是[也不是]的字符導致逗號。

在逗號後面,表示可以有零個或多個字符,既不是[也不是],因此必須有一個關閉]

零寬度斷言意味着模式必須在匹配文本之前或之後,但不是匹配的一部分。由於我們只匹配,我們的替換件只是.

+0

+1對於一個非常好的解決方案加說明 – Alex 2012-04-10 06:16:18

+0

謝謝你,傑伊。這個解決方案有效這讓我有更多的瞭解正則表達的動機。 – 2012-04-10 16:21:41

0

,如果它總是在這個sheme,再快一點將與string.replace:

string sin = "Attributes["412324 - PENNDOT I-95", "Category"].Value, Attributes["412324 - PENNDOT I-95", "Category"].Code"; 
string sout = sin.Replace("\", \"","\". \""); 

你可以用正則表達式是相同的,但它是慢,但仍然是可以打破如果輸入的字符串改變它的結構

+0

這是一個有效的解決方案,但我不同意你最後的評論。你的解決方案比一個好的正則表達式解決方案更容易破解。 – 2012-04-10 05:33:39

+0

是的,我知道這一點,RegEx將在大多數一般情況下工作,但如果輸入字符串總是看起來像這樣--OP可以考慮使用這個更簡單(和更快)的解決方案。無論如何,OP的問題的正確答案是Jay的答案 - 它大量使用RegEx來替換正確的逗號 – 2012-04-10 06:49:30

+0

正如你所提到的,這個解決方案應該可以工作,但是有時輸入字符串可能沒有額外的空格和引號標記可以是單引號。我的問題沒有說清楚。 – 2012-04-10 16:25:14