[英]Is there an alternative to string.Replace that is case-insensitive?
[英]Alternative to String.Replace
所以今天我写的代码基本上是这样的:
string returnString = s.Replace("!", " ")
.Replace("@", " ")
.Replace("#", " ")
.Replace("$", " ")
.Replace("%", " ")
.Replace("^", " ")
.Replace("*", " ")
.Replace("_", " ")
.Replace("+", " ")
.Replace("=", " ")
.Replace("\", " ")
这不是很好。 我想知道是否有正则表达式或我可以写的东西会替换所有对Replace()
函数的调用?
您可以使用Regex.Replace() 。 所有字符都可以放在方括号之间,方括号与方括号之间的任何字符匹配。 一些特殊字符必须用反斜杠转义,我在这里使用@verbatim字符串,所以我不必为C#编译器双重转义它们。 第一个参数是输入字符串,最后一个参数是替换字符串。
var returnString = Regex.Replace(s,@"[!@#\$%\^*_\+=\\]"," ");
仅供参考 - 如果您需要修改此正则表达式,则需要了解正则表达式语言。 这很简单,作为开发人员,你真的应该为自己添加正则表达式到你的工具箱 - 你不需要每天都有它们,但是在需要的时候能够适当地应用它们会让你回来最初努力的十倍。 这是一个链接到一个网站,其中包含一些顶尖的,易于学习的关于正则表达式的教程和参考资料: regular-expressions.info 。 一旦你对正则表达式有所了解并希望在你的软件中使用它们,你就会想要购买Regex Buddy。 它是学习和使用正则表达式的廉价而非凡的工具。 我很少购买开发工具,但是这一次是值得每一分钱。 它在这里: Regex Buddy
s/[!@#$%^*_+=\]/ /
将是它的正则表达式...在c#中你应该可以使用
Regex.Replace(yourstring, "[!@#$%^*_+=\]", "" );
虽然我的C#生锈了..
如果你不想深入研究正则表达式,这里有一些其他的扩展方法可能性。
您可以传入要替换的特定字符:
static public string ReplaceCharsWithSpace(this string original, string chars)
{
var result = new StringBuilder();
foreach (var ch in original)
{
result.Append(chars.Contains(ch) ? ' ' : ch);
}
return result.ToString();
}
或者,如果您知道只想保留或仅删除特定类型的字符,则可以使用char
的各种方法,例如IsLetter
, IsDigit
, IsPunctuation
和IsSymbol
:
static public string ReplaceNonLetterCharsWithSpace(this string original)
{
var result = new StringBuilder();
foreach (var ch in original)
{
result.Append(char.IsLetter(ch) ? ch : ' ');
}
return result.ToString();
}
以下是您如何使用这些可能性:
string s = "ab!2c";
s = s.ReplaceCharsWithSpace(@"!@#$%^*_+=/"); // s contains "ab c"
string t = "ab3*c";
t = t.ReplaceNonLetterCharsWithSpace(); // t contains "ab c"
如果需要,您可以使用Lambda表达式和List<>, ForEach
将其减少到几行
using System.Collections.Generic;
namespace ReplaceWithSpace
{
class Program
{
static void Main(string[] args)
{
string someString = "#1, 1+1=2 $string$!";
var charsToRemove = new List<char>(@"!@#$%^*_+=\");
charsToRemove.ForEach(c => someString = someString.Replace(c, ' '));
System.Diagnostics.Debug.Print(someString); //" 1, 1 1 2 string "
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.