2010-11-18 100 views
2

我一直在嘗試構建正則表達式,但一直未能獲得一個特定的條件。使用空格替換非alpha字符的正則表達式

我想要一個正則表達式來刪除除破折號之外的所有非alpha字符(-)。只有在前綴爲空格的情況下才應更換虛線。

I.e.

TEST-TEST -TEST#TEST.TEST 

應改爲

TEST-TEST TEST TEST TEST 

我一直在使用[^a-zA-Z0-9],但一直沒能包括一個或條件初始化。

+0

根據你例子,它看起來像你想保留空間以及? – 2010-11-18 22:24:17

+0

或用空格替換非alpha字符? – 2010-11-18 22:37:32

回答

2

這裏是我想出了(\s-|[^A-Za-z0-9-]) ...這將刪除所有非字母數字,但保持「 - 」除非有收到了空間「 - 」

測試使用的sed在Linux中,在那一刻我沒有訪問VS或單來測試C#

echo "TEST-TEST -TEST#TEST.TEST -1234" | sed 's/\(\s-\|[^A-Za-z0-9-]\)/ /g' 

輸出

TEST-TEST TEST TEST TEST 1234 
  • ()和|用於OR條件
  • 我們首先刪除所有「 - 」使用\s-
  • 接下來我們將所有的字母數字和「 - 」與[^A-Za-z0-9-]
+0

所有你需要的是瀏覽器http://ideone.com/wYU5D – 2010-11-18 23:05:11

+1

'var regex = new Regex(@「(\ s- | [^ A-Za-z0-9-]));字符串結果= regex.Replace(「TEST-TEST -TEST#TEST.TEST」,「」);' – 2010-11-18 23:06:45

+0

完美的工作。謝謝。 – 2010-11-19 00:35:07

1
// Skip over '-', grab non-word characters or the ' -' sequence to replace 
string pattern = @"(?!-)(\W| -)+"; 
string replacement = ""; 
Regex regex = new Regex(pattern); 
string result = regex .Replace("Replace - this *@#&@#* string-already", replacement); 

的(? - !)是一個零寬度式斷言這將跳過「 - 」符號......如果它前面有一個空格,第二組將與之匹敵。

如果你想替換一個空間,而不是完全刪除字符,只是改變

string replacement = " "; 

的模式是貪婪的,所以它會取代非單詞字符組用一個空格。