正则表达式用空格替换非字母字符

时间:2010-11-18 22:17:36

标签: c# .net regex

我一直在尝试构建一个正则表达式,但却无法使一个特定条件起作用。

我希望正则表达式删除所有非字母字符,但短划线(-)除外。只有在用空格作为前缀的情况下才应更换破折号。

TEST-TEST -TEST#TEST.TEST

应改为

TEST-TEST TEST TEST TEST

我一直在使用[^a-zA-Z0-9],但未能包含一个OR条件init。

2 个答案:

答案 0 :(得分:3)

以下是我提出的(\s-|[^A-Za-z0-9-]) ...它将删除所有非字母数字但保留“ - ”,除非前面有空格“ - ”

在Linux中使用sed进行测试,目前我无法访问VS或Mono以在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-]

答案 1 :(得分:2)

// 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 = " ";

模式是贪婪的,因此它将用一个空格替换非单词字符组。