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