C# 用单个唯一字符替换字符串中的特殊字符

C# 用单个唯一字符替换字符串中的特殊字符,c#,regex,C#,Regex,我有这样一个字符串: string inputStr = "Name*&^%LastName*#@"; 下面的正则表达式将用“-”替换所有特殊字符 Regex rgx = new Regex("[^a-zA-Z0-9 - _]"); someStr = rgx.Replace(someStr, "-"); 这会产生类似以下内容的输出: 姓名---姓氏--- 如何用单个“--”替换“--”,因此输出如下所示: Name-LastName 所以问题是如何用一个'-'替换所有特殊字符 问

我有这样一个字符串:

string inputStr = "Name*&^%LastName*#@";
下面的正则表达式将用“-”替换所有特殊字符

Regex rgx = new Regex("[^a-zA-Z0-9 - _]");
someStr = rgx.Replace(someStr, "-");
这会产生类似以下内容的输出: 姓名---姓氏---

如何用单个“--”替换“--”,因此输出如下所示:

Name-LastName
所以问题是如何用一个'-'替换所有特殊字符

问候。

试试这个

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

但是这会给出
Name LastName-
这样可以吗

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

string someStr = rgx.Replace(inputStr, "-").TrimEnd('-');
将输出
Name LastName

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

试试这个

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

但是这会给出
Name LastName-
这样可以吗

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

string someStr = rgx.Replace(inputStr, "-").TrimEnd('-');
将输出
Name LastName


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

如何用单个'-'替换'-'
如果这样做,结果将是
Name LastName-
。为什么不通过正则表达式拆分,然后将其重新编码?我会将
-
放在字符类的末尾,现在它位于两个空格之间。字符类将是
[^a-zA-Z0-9.-]
。这是当
-
表示“-”而不是间隔时的规则…
如何用单个“-”替换“--”
如果这样做,结果将是
Name LastName-
。为什么不通过正则表达式将其拆分,并在后面加上concat呢?我会将
-
放在字符类的末尾,它现在位于两个空格之间。字符类将是
[^a-zA-Z0-9.-]
。这是当
-
表示“-”而不是间隔时的规则……如果不合适,您可以将其与
修剪
@matthewstrobbridge结合使用。好主意,我想修改regex,谢谢Sriram和Matthew,这就是工作。@pguardiario这里缺少什么?我只是用最小的改动修改了OP的代码?这会在任何地方失败吗?
-
在正则表达式的
[]
中具有特殊意义。我知道原始版本有缺陷,但修复它是你的工作。如果它不好,你可以将它与
Trim
@matthewstrobbridge结合使用。好主意,我想修改正则表达式。谢谢Sriram和Matthew,完成了这项工作。@pguardiario这里缺少什么?我只是用最小的改动修改了OP的代码?这会在任何地方失败吗?
-
在正则表达式的
[]
中具有特殊意义。我知道原版有缺陷,但你的工作是修复它。