2012-08-13 14 views
1

我有這樣的字符串:需要解決一個正則表達式,它取代了太多

Text [City 1 || Location] text [Population] 
|| Text [City 2 || Location] text [Population] 

我需要正則表達式替換其中||只需在==中使用==。

所以我必須:

Text [City 1 == Location] text [Population] 
|| Text [City 2 == Location] text [Population] 

我寫這個正則表達式:

str = Regex.Replace(str, @"\[(.*?)\|\|(.*?)\]", "[$1==$2]"); 

但它取代所有||與==。

如何解決?

回答

1

你應該能夠避免匹配一切,只得到 '||'像這樣:

str = Regex.Replace(str, @"(?<=\[[^\[\]]*)\|\|(?=[^\[\]]*\])", "=="); 

那麼這裏發生了什麼?

(?<=\[[^\[\]]*)這是後面一個零寬度的外觀相匹配「[」和任何字符跟隨它,比「[」或「]」

\|\|此相匹配的實際其他「||」

(?=[^\[\]]*\])這是一個零寬度向前看,除「[」或「]」以外的任何字符,後面跟「]」

+0

工程!謝謝!你能解釋這個正則表達式嗎? (?<= \ [[^ \ [\]] *)和(?= [^ \ [\]] * \])部分:-) – podeig 2012-08-13 10:50:23

+1

在答案中添加。 – davidrac 2012-08-13 10:55:13

1

編輯:嘗試使用lookbehindlookahead斷言:

(?<= subexpression) 
Zero-width positive lookbehind assertion. 

(?= subexpression) 
Zero-width positive lookahead assertion. 
+0

由於相匹配,但它給了相同的結果。全部被替換。 – podeig 2012-08-13 10:44:01

+1

你能解釋爲什麼這是不同的? – davidrac 2012-08-13 10:46:45