如何使用C#过滤String中的隐藏字符

时间:2016-12-07 22:21:48

标签: c#

我是C#的新手,并尝试过滤如何过滤从文件中读取的数据。我有一个我从中读取的文件,其中包含以下数据模拟器:

3 286 858 95.333 0.406 0.427 87.00 348 366 4 b
9 23 207 2.556 0.300 1.00 1.51 62 207 41 a
9 37 333 4.111 0.390 0.811 2.03 130 270 64 a
10 21 210 2.100 0.348 0.757 3.17 73 159 23 a
9 79 711 8.778 0.343 0.899 2.20 244 639 111 a
10 66 660 6.600 0.324 0.780 2.25 214 515 95 a

当我阅读这些数据时,其中一些数据中隐藏了Carriage returnLine Feed个字符。你能否告诉我是否有办法将它们删除。例如,由于其中包含换行符,我的变量之一可能会保留以下值:

mystringval = "9
               "

我希望将此mystringval变量转换回

mystringval  = "9"

2 个答案:

答案 0 :(得分:1)

如果你想摆脱所有特殊字符,你可以学习正则表达式并使用Regex.Replace

var value = "&*^)#abcd.";
var filtered = System.Text.RegularExpressions.Regex.Replace(value, @"[^\w]", "");

<强> REGEXPLANATION

  • 字符串之前的@意味着您正在使用文字字符串而c#转义序列不起作用,只留下正则表达式转义序列
  • [^abc]匹配所有不是a,b或c的字符(用空格替换它们)
  • \w是一个特殊的正则表达式代码,表示字母,数字或下划线
  • 您还可以使用@"[^A-Za-z0-9\.]"来过滤字母,数字和小数。有关详细信息,请参阅http://rubular.com/

答案 1 :(得分:0)

除了使用RegEx之外,您还可以使用LINQ执行类似

的操作
var goodCharacters = input
    .Replace("\r", " ")
    .Replace("\n", " ")
    .Where(c => char.IsLetterOrDigit(c) || c == ' ' || c == '.')
    .ToArray();
var result = new string(goodCharacters).Trim();

前两个Replace来电将防止在一行结尾处有一个数字,在下一行的开头有一个数字,例如"123\r\n987"原则为"123987",而我认为您需要"123 987"

试试我的样本here on ideone.com