我想知道指定像
这样的字符数组的最佳方法是什么{
}
[
]
然后检查一个字符串,如果它们在那里,则完全删除它们。
if (compiler.Parser.GetErrors().Count == 0)
{
AstNode root = compiler.Parse(phrase.ToLower());
if (compiler.Parser.GetErrors().Count == 0)
{
try
{
fTextSearch = SearchGrammar.ConvertQuery(root, SearchGrammar.TermType.Inflectional);
}
catch
{
fTextSearch = phrase;
}
}
else
{
fTextSearch = phrase;
}
}
else
{
fTextSearch = phrase;
}
string[] brackets = brackets = new string[]
{
"{",
"}",
"[",
"]"
};
string[] errorChars = errorChars = new string[]
{
"'",
"&"
};
StringBuilder sb = new StringBuilder();
string[] splitString = fTextSearch.Split(errorChars, StringSplitOptions.None);
int numNewCharactersAdded = 0;
foreach (string itm in splitString)
{
sb.Append(itm); //append string
if (fTextSearch.Length > (sb.Length - numNewCharactersAdded))
{
sb.Append(fTextSearch[sb.Length - numNewCharactersAdded]); //append splitting character
sb.Append(fTextSearch[sb.Length - numNewCharactersAdded - 1]); //append it again
numNewCharactersAdded++;
}
}
string newString = sb.ToString();
答案 0 :(得分:11)
正则表达式可以更容易地做到这一点:
var result = Regex.Replace(input, @"[[\]()]", "");
使用字符集([...]
)匹配其中的任何字符并替换为空。 Regex.Replace
将替换所有匹配。
答案 1 :(得分:6)
另一种简洁的方法是使用Enumerable.Except
来获取Chars的集合差异(假设brackets
是字符):
String newString = new String(oldString.Except(brackets).ToArray());
答案 2 :(得分:2)
string str = "faslkjnro(fjrmn){ferqwe}{{";
char[] separators = new []{'[', ']','{','}' };
var sb = new StringBuilder();
foreach (var c in str)
{
if (!separators.Contains(c))
{
sb.Append(c);
}
}
return sb.ToString();
答案 3 :(得分:0)
这个怎么样:
string myString = "a12{drr[ferr]vgb}rtg";
myString = myString.Replace("[", "").Replace("{", "").Replace("]", "").Replace("}", "");
你最终得到:
a12drrferrvgbrtg
答案 4 :(得分:0)
我不知道我是否理解你的问题,但你可以解决这个问题:
string toRemove = "{}[]";
string result = your_string_to_be_searched;
foreach(char c in toRemove)
result = result.Replace(c.ToString(), "");
或使用扩展方法
static class Extensions
{
public static string RemoveAll(this string src, string chars)
{
foreach(char c in chars)
src= src.Replace(c.ToString(), "");
return src;
}
}
使用此功能,您可以使用string result = your_string_to_be_searched.RemoveAll("{}[]");
答案 5 :(得分:0)
string charsToRemove = @"[]{}";
string pattern = string.Format("[{0}]", Regex.Escape(charsToRemove));
var result = Regex.Replace(input, pattern, "");
与其他类似答案相比,这方面的主要优点是您不必为确定哪些字符需要在RegEx中转义而烦恼;你可以让图书馆为你照顾。
答案 6 :(得分:0)
你可以用这样一个非常紧凑的方式做到这一点:
string s = "ab{c[d]}";
char[] ca = new char[] {'{', '}', '[', ']'};
Array.ForEach(ca, e => s = s.Replace(e.ToString(), ""));
或者这个:
StringBuilder s = new StringBuilder("ab{c[d]}");
char[] ca = new char[] {'{', '}', '[', ']'};
Array.ForEach(ca, e => s.Replace(e.ToString(), ""));
答案 7 :(得分:0)
根据以下答案得出:https://stackoverflow.com/a/12800424/1498669
只需将.Split()与所需可移动对象的char []配合使用,然后使用.Join()或.Concat()捕获它
char[] delChars = "[]{}<>()".ToCharArray();
string input = "some (crazy) string with brac[et]s in{si}de";
string output = string.Join(string.Empty, input.Split(delChars));
//or
string output = string.Concat(input.Split(delChars));
参考:
https://docs.microsoft.com/en-us/dotnet/csharp/how-to/parse-strings-using-split https://docs.microsoft.com/en-us/dotnet/csharp/how-to/concatenate-multiple-strings#code-try-4