对于C#用户来说这似乎是一个常见的问题,经过研究和多次尝试后,我无法从字符串中删除一对括号。我遇到问题的字符串是Service (additional)
。
在完成我的研究之后,我理解在Regex.Replace
中对括号的处理方式不同。我的研究也得到了我尝试的多个答案,但似乎没有任何效果。以下是我尝试删除这些括号的一些方法。
cleanValue = Regex.Replace(intVal, " ", "").Replace("(", "").Replace(")", "").Replace(",", "").Replace("/", "").Replace("-", "");
cleanValue = Regex.Replace(intVal, " ", "").Replace(@"\(", "").Replace(@"\)", "").Replace(",", "").Replace("/", "").Replace("-", "");
cleanValue = Regex.Replace(intVal, " ", "").Replace("[()]", "").Replace(",", "").Replace("/", "").Replace("-", "");
cleanValue = Regex.Replace(intVal, " ", "").Replace(@"[^a-zA-Z]", "").Replace(",", "").Replace("/", "").Replace("-", "");
这些都没有奏效,在单步执行代码后,我只看到'e'和'之间的空格('删除了。我错过了什么吗?
如果有人想看到这里使用的function
,那就是:
public static string CleanExtra(string intVal)
{
string cleanValue;
if (intVal == null)
{
throw new System.ArgumentException("Value cannot be null", "original");
}
else
{
//cleanValue = Regex.Replace(intVal, " ", "").Replace("(", "").Replace(")", "").Replace(",", "").Replace("/", "").Replace("-", "");
//cleanValue = Regex.Replace(intVal, " ", "").Replace(@"\(", "").Replace(@"\)", "").Replace(",", "").Replace("/", "").Replace("-", "");
//cleanValue = Regex.Replace(intVal, " ", "").Replace("[()]", "").Replace(",", "").Replace("/", "").Replace("-", "");
cleanValue = Regex.Replace(intVal, " ", "").Replace(@"[^a-zA-Z]", "").Replace(",", "").Replace("/", "").Replace("-", "");
}
return cleanValue;
}
答案 0 :(得分:18)
正则表达式在此处过度,因为这可以通过简单的Replace
调用来完成:
string val = intVal.Replace("(", "").Replace(")", "");
答案 1 :(得分:7)
致电Regex.Replace(...)
后,您实际上正在使用string.Replace(...)
。这使您对.Replace(@"[^a-zA-Z]", "")
的调用毫无用处。
将其简化为:
cleanValue = Regex.Replace(intVal, @"[^a-zA-Z]", "");
这应该删除所有空格和特殊字符,这是您的代码尝试执行的操作。这包括括号。
答案 2 :(得分:3)
这是因为每一秒Replace
都是对string
的调用,因此不会替换为正则表达式。
答案 3 :(得分:0)
或者,如果您想使用一种奇妙的LINQ方式来代替正则表达式,请执行以下操作:
return new string(input.Where(c => c != '(' && c != ')').ToArray());
这将删除所有括号或括号:
var chars = input
.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.OpenPunctuation
&& CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.ClosePunctuation)
.ToArray();
return new string(chars);