C# regex 删除不可打印字符和控制字符,在混合了多种不同语言、unicode 字母的文本中

标签 c# regex unicode

我很感激你的帮助,因为我不知道要使用哪个范围的字符,或者我是否在 ruby​​ 中找到了像 [[:cntrl:]] 这样的字符类?

通过不可打印,我的意思是删除所有未显示在 ie 输出中的字符,当一个人打印输入字符串时。请注意,我正在寻找 c# 正则表达式,我的代码没有问题

最佳答案

您可以使用

删除所有控制字符和其他不可打印的字符
s = Regex.Replace(s, @"\p{C}+", string.Empty);

\p{C} Unicode 类别类匹配所有控制字符,甚至是 ASCII 表之外的字符,因为在 .NET 中,Unicode 类别类默认是 Unicode 识别的。

将其分解为子类别

  • 要仅匹配基本控制字符,您可以使用\p{Cc}+ , 查看 Other, Control 中的 65 个字符Unicode 类别。它等于 [\u0000-\u0008\u000E-\u001F\u007F-\u0084\u0086-\u009F \u0009-\u000D \u0085]+正则表达式。
  • 只匹配161 other format字符,包括众所周知的软连字符 ( \u00AD )、零宽度空格 ( \u200B )、零宽度非连接符 ( \u200C )、零宽度连接符 ( \u200D )、从左到右标记 ( \u200E ) 和从右到左标记 ( \u200F ) 使用 \p{Cf}+ .包括星体位置代码点在内的等效项是 (?:[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC38]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F])+正则表达式。
  • 匹配137,468 Other, Private Use control code points 你可以使用 \p{Co}+ , 或其等效物,包括星体位置代码点,(?:[\uE000-\uF8FF]|[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD])+ .
  • 匹配 2,048 Other, Surrogate code points 包含一些表情符号,您可以使用 \p{Cs}+ , 或 [\uD800-\uDFFF]+正则表达式。

关于C# regex 删除不可打印字符和控制字符,在混合了多种不同语言、unicode 字母的文本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564692/

相关文章:

c# - 属性上的 SetValue 不更新对象

c# - 如何在 .NET 中测试可执行文件

c# - 为什么这个协程只运行一次?

regex - grep:匹配文字 "+"

php - 为什么我的 RegExp 返回 false 且字符数正确?

匹配所有无序数字序列的正则表达式

python - 在 python 2.7 中处理非英文文本

c# - Oracle Entity Framework - 从不同模式中的表生成实体

Perl Unicode 内部 - 与 utf8 混淆

python - 如何使用python将带有unicode的dict转换为中文字符