我有一个程序可以从内存中读取某些字符串。这些字符串大部分包含可识别的字符。然而,在字符串中的随机点,会出现“奇怪”的字符。我不认识的字符。通过访问允许我粘贴 Unicode 字符的站点以查看它们是什么,我发现选择的“奇怪”字符如下:
- \x{1} SOH, "标题开始", ctrl-a
- \x{2} SOT,“文本开始”
- \x{3} EOT,“文本结束”
- \x{7} BEL, bell, ctrl-g
- \x{13} dc3,设备控制三,ctrl-s
- \x{11} dc1, 设备控制一, ctrl-q
- \x{14} dc4,设备控制四,ctrl-t
- \x{1A} sub, substitute, ctrl-z
- \x{6} ack, acknowledge, ctrl-f
我想解析我的字符串以删除这些字符。不过,通过查看字符串,我发现所有不需要的字符总是分别被 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;
}
它成功了,再次感谢。
最佳答案
Regex 将是您的解决方案,应该可以正常工作。您可以将这些字符分配给 Pattern,您可以使用子方法 Match 或者甚至只是 Replace 用空格 "",或者使用 ""将它们一起从字符串中删除。
正则表达式替换:https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx
正则表达式匹配: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 变量,将它们添加到模式中以进行替换。
字符变量: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。 如果为真,则删除整个字符串/子字符串/SOT 或 EOT。
将原始字符串拆分为字符串[],然后逐行处理可能更容易...在不知道字符串是什么样子的情况下很难解析你的字符串,所以希望我提供了一些有用的东西 ^.^
关于c# - 从字符串中删除以 SOT 开头并以 EOT 结尾的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28215808/