正则表达式用空格替换非字母字符
我一直在尝试构建一个正则表达式,但无法使一个特定的条件工作。
我想要一个正则表达式删除所有非字母字符,但破折号( -
)除外。 只有在以空格为前缀的情况下才应更换破折号。
即
TEST-TEST -TEST#TEST.TEST
应该改为
TEST-TEST TEST TEST TEST
我一直在使用[^a-zA-Z0-9]
但未能包含一个OR条件init。
这是我提出的(\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-]
// 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 = " ";
模式是贪婪的,因此它将用单个空格替换非单词字符组。