【问题标题】:How to filter hidden characters in a String using C#如何使用 C# 过滤字符串中的隐藏字符
【发布时间】:2016-12-07 22:21:48
【问题描述】:

我是 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"

【问题讨论】:

  • 你可以使用 mystringval = mystringval.replace("/r/n", "") 这将用空字符替换回车换行符。
  • 使用Environment.NewLine。顺便说一句,@user1336827 "/r/n" 绝对不正确!
  • @user1336827 感谢您的评论。在我的结果中,我认为这是一个换行符。但我不确定它是什么。因此,使用您的建议或使用 Environment.NewLine 不起作用(因为这些特殊字符可能不是回车和换行)。有没有办法说,这个变量中只保留字母、数字和小数点。
  • 如果你只关心空格并且只关心字符串的开头和结尾,你可以这样做mystringval = mystringval.Trim()

标签: c#


【解决方案1】:

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

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

正则表达式

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

【讨论】:

  • 我在写答案时想到的一件事是如何处理"123\r\n987" 之类的事情。有没有办法在一个正则表达式中将它变成"123 987",还是需要两个?
  • @WaiHaLee 你的意思是用空格替换 \r\n 吗?你需要两个 regex.Replace。
  • 很公平。我不确定是否有一些单一的、复杂的 RegEx 对可以做到这一点。
  • @WaiHaLee 限制因素是替换字符串是一个简单的字符串。您对模式所做的任何更改都不会影响替换字符串。
【解决方案2】:

除了使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2017-05-10
    • 2013-02-21
    • 2013-01-17
    相关资源
    最近更新 更多