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的代码?这会在任何地方失败吗?-
在正则表达式的[]
中具有特殊意义。我知道原版有缺陷,但你的工作是修复它。