C#正则表达式删除不可打印的字符,并控制字符,在一个混合了许多不同语言的文本中,unicode字母

fok*_*oho 14 c# regex unicode

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

通过不可打印的方式,我的意思是当打印输入字符串时删除所有未显示在输出中的字符.请注意,我寻找ac#regex,我的代码没有问题

Wik*_*żew 34

您可以删除所有控件和其他不可打印的字符

s = Regex.Replace(s, @"\p{C}+", string.Empty);
Run Code Online (Sandbox Code Playgroud)

\p{C}Unicode的类别类的所有控制字符相匹配,即使是那些外面的ASCII表,因为在.NET中,Unicode的类别类是Unicode的默认.

  • @SteveCinq然后,您也可以使用`@“ [\ p {C}-[\ r \ n \ t]] +”`,并将其他任何符号添加到要避免替换的嵌套括号中。 (4认同)
  • 以下是 **支持的 Unicode 常规类别** https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-classes-in-regular-expressions#SupportedUnicodeGeneralCategories 的列表查看**支持的命名块**(如下) (2认同)

Yan*_*nga 5

您可以尝试:

string s = "Täkörgåsmrgås";
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);
Run Code Online (Sandbox Code Playgroud)


评论后更新答案:

关于不可打印字符的文档:https : //en.wikipedia.org/wiki/Control_character

Char.IsControl 方法:

https://msdn.microsoft.com/en-us/library/system.char.iscontrol.aspx

也许你可以试试:

string input; // this is your input string
string output = new string(input.Where(c => !char.IsControl(c)).ToArray());
Run Code Online (Sandbox Code Playgroud)