2012-07-24 15 views
1

試圖做在一個字符串一些正則表達式匹配和替換,從而使所有符號,單引號和空格字符與短劃線代替更換任何兩場的C#正則表達式:「 - 」具有相同值

.. 。和

將所有重複的破折號替換爲單個破折號。

這就是我正在嘗試,但它不工作,因爲重複的破折號不被替換。任何幫助表示讚賞和感謝。

Regex.Replace(mystring, "([' &])|([-]{2,})", "-") 
+1

這可能會更好地說, 「符號,單引號和空格字符」 不是 「和」, 「'」。後者非常難以閱讀。 – 2012-07-24 23:21:14

+0

我們可以得到一個不工作的字符串樣本嗎? – 2012-07-24 23:24:01

回答

6

試試這個(看起來更簡單)。我假設你從來不想在結果中使用「 - 」。

string orig = "12467&89- 1&2467'89 12'46789 12467--89"; 

Regex regex = new Regex("[&' -]+"); 

string newString = regex.Replace(orig, "-"); 

輸出:

12467-89-1-2467-89-12-46789-12467-8 
+0

謝謝詹姆斯,這是一個很大的幫助。 – larryq 2012-07-25 14:42:57

1

這個正則表達式應該工作:

你只需要做的任務:

mystring = Regex.Replace(mystring, "([' &])|([-]{2,})", "-"); 

字符串是不可改變的,還記得嗎?

+0

謝謝邁克爾。如果我以這個調用爲例,我仍然在連續得到兩個破折號:string mystring = Regex.Replace(「hi& - 6-」,「(['&])|([ - ] {2,})」 ,「 - 」); – larryq 2012-07-24 23:34:30

+0

是的,因爲您的正則表達式不會將連字符和帶連字符的單引號組合在一起。如果你的意圖是你的結果字符串沒有雙連字符,那麼在James的答案中使用正則表達式。 – 2012-07-24 23:40:57