【问题标题】:Replace unprintable characters from a string替换字符串中的不可打印字符
【发布时间】:2018-10-21 01:02:03
【问题描述】:

我正在创建一个逻辑来用空格替换字符串中的不可打印字符,只是我很困惑,如果它是相同的 ASCII 字符和 Unicode 字符,我已经回顾了如何使用 regex.replace 函数但我不明白如何验证字符串中的字符是否在以下条件之间。

这是我得到的要求,用空格代替:

  • 值为 0 到 31 的所有 ASCII 字符。
  • 值为 127、129、141、143、144 和 157 的 Unicode 字符

我已经尝试过了(我相信这适用于 ASCII 字符)但是我可以处理 unicode 字符吗?

newPartNum = Regex.Replace(PartNum, @"[^\u0020-\u007E]", " ");

任何帮助将不胜感激。

【问题讨论】:

  • 你已经尝试了什么?
  • 嗨@maccettura 我有这个 newPartNum = Regex.Replace(ttPartR.PartNum, @"[^\u0020-\u007E]", "");我相信这适用于 ASCII 字符,但我该如何处理 unicode 字符?
  • 在你的问题中包括,不是在 cmets
  • 另见CharStrings
  • “不可打印”是什么意思?您是否认为零宽度空间是“不可打印的”?从右到左的标记呢?结合变音符号?回车和换行?您需要从定义问题开始。

标签: c# regex unicode replace ascii


【解决方案1】:

看一下Char结构体类型的IsControl method。如果没有其他原因,它会谈论控制字符的范围。

此外,在正则表达式中使用一系列有效字符当然是可行的,但在处理 Unicode 字符时可能会变得混乱,因为范围很大。只查找需要替换的字符可能会更好。再次,查看 Char.IsControl 方法以了解详细信息。

【讨论】:

  • 没有代码示例?没有指向Char.IsControl() 文档的链接?这是更少的答案,更多的评论。
【解决方案2】:

借助Linq,您可以检查该字符是否为控制字符。我在下面的目标是从字符串中删除控制字符-

string str = ""; // Whatever your string is. Comes here.
string res = new string(str.Where(c => !char.IsControl(c)).ToArray());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多