2010-11-18 101 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 = " "; 

的模式是贪婪的,所以它会取代非单词字符组用一个空格。