我有一个从内存中读取某些字符串的程序。这些字符串在很大程度上包含可识别的字符。然而,在字符串中的随机点,出现“怪异”字符。我不认识的人物。通过访问允许我粘贴Unicode字符的网站来查看它们是什么,我发现选择了“怪异”的字符是这些:
我想解析我的字符串以删除这些字符。通过查看字符串,我发现的是,所有不需要的字符总是分别被SOT和EOT包围。
因此,我认为我的问题是:如何从字符串中删除以SOT开头并以EOT结尾的所有子串?
编辑:尝试解决方案
使用来自@RagingCain的想法我做了以下方法:
private static string RemoveInvalidCharacters(string input)
{
while (true)
{
var start = input.IndexOf('\u0002');
var end = input.IndexOf('\u0003', start);
if (start == -1 || end == -1) break;
Console.WriteLine(@"Start: " + start + @". End: " + end);
var diff = end - start;
input = input.Remove(start, diff);
}
return input;
}
这样做,再次感谢。
答案 0 :(得分:3)
正则表达式将是您的解决方案,应该可以正常工作。您可以将这些字符分配给模式,然后您可以使用子方法 匹配 ,甚至只需 替换 他们有空白" ",或者只使用""
将它们从字符串中一起剪切掉Regex.Replace:https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx
Regex.Match:https://msdn.microsoft.com/en-us/library/bk1x0726(v=vs.110).aspx
正则表达式示例:
public static void Main()
{
string input = "This is text with far too much " +
"whitespace.";
string pattern = "\\s+";
string replacement = " ";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
Console.WriteLine("Original String: {0}", input);
Console.WriteLine("Replacement String: {0}", result);
}
我知道虽然无法“看到"它们应该由Unicode本身将它们分配给Char变量,将它们添加到模式中以进行替换。
Char变量:https://msdn.microsoft.com/en-us/library/x9h8tsay.aspx
文本开头的Unicode: http://www.fileformat.info/info/unicode/char/0002/index.htm
Unicode结尾文字: http://www.fileformat.info/info/unicode/char/0003/index.htm
要应用于您的解决方案: 字符串是否包含SOT,EOT。 如果为true,则删除整个字符串/子字符串/ SOT或EOT。
将原始字符串拆分为字符串[]可能更容易,然后逐行进行...很难通过字符串解析它而不知道它看起来像什么,所以希望我提供的东西有助于^。 ^