0

我有一个这样的字符串:

string inputStr = "Name*&^%LastName*#@";

以下正则表达式将所有特殊字符替换为“-”

Regex rgx = new Regex("[^a-zA-Z0-9 - _]");
someStr = rgx.Replace(someStr, "-");

这会产生类似的输出:Name---LastName---

如何将 '---' 替换为单个 '-' 以使输出如下所示:

Name-LastName

所以问题是如何用一个“-”替换所有特殊字符?

问候。

4

1 回答 1

3

尝试这个

Regex rgx = new Regex("[^a-zA-Z0-9 \- _]+");//note - character is escaped

或者

Regex rgx = new Regex("[^a-zA-Z0-9 _-]+");//or use - as last character

但这会给出Name-LastName-这是可以的还是..?

如果您不需要-最后一个位置,您也可以使用以下代码。归功于@MatthewStrawbridge。你可以在评论中看到。

string someStr = rgx.Replace(inputStr, "-").TrimEnd('-');

将输出Name-LastName.

编辑:正如@pguardiario 在评论中指出的那样,更新了我对转义的回答,-因为 range( ) 对字符[]具有特殊含义。-如果我们需要-作为文字,我们需要对其进行转义或使其成为字符类的第一个或最后一个字符,以便表现为文字。

于 2013-09-19T08:11:34.197 回答