2011-10-18 38 views
0

我在C#中的正則表達式如下:正則表達式,匹配字符與空間只有

return Regex.Replace(str, "[^a-zA-Z0-9_.-]+", "", RegexOptions.Compiled); 

有效字符爲a-z,0-0,_, - 。

我想只匹配 - 如果它有左和/或右的空間。

舉一個例子:
路面-roads =不能代替任何東西(僅適用情況)(路面        -roads是罰款太)
路面 - 公路=的 - 應該被刪除
pavement-道路=的 - 應該被刪除
路面 -          道路=的 - 應該被刪除

+1

有效的字符是:a-z,0-0,_,。, - 。?看起來這些是無效字符。這個路面 - 左側有空間。並且它沒有向右移動的空間,因此AND/OR = true。但你說這是有效的。我很困惑。 – FailedDev

+0

當我將路面 - @ $$ @#道路傳遞給上述正則表達式時,@ $$ @#被刪除。 – user730108

+0

這並沒有使這個例子更清晰。 – FailedDev

回答

0

試試這個:

return Regex.Replace(str, "(+)-(+)", "\\1\\2", RegexOptions.Compiled); 

這應該刪除空格包圍任何破折號,並保持空間不變。

+0

我應該提到,它應該保持原始正則表達式「[^ a-zA-Z0-9 _。] +」,並且只是爲上面的需求添加修改需求。我嘗試插入「[^ a-zA-Z0-9 _。(+) - (+)] +」,並且拋出一個異常,以相反的順序解析正則表達式範圍 – user730108

0

看起來你只是想去掉與破折號之後的空間。嘗試

(?:[^\w. ]|(?:\-(?=)))+