2011-10-18 42 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. ]|(?:\-(?=)))+