如何从UTF8字符串中删除控制字符

6
我有一个VB.NET程序,处理文档内容。 该程序处理大量文档作为“批处理”(> 200万个文档;总容量1TB)。 其中一些文档可能包含控制字符或类似f0e8的字符(http://www.fileformat.info/info/unicode/char/f0e8/browsertest.htm)。
是否有一种简单而尤其快速的方法来删除这些字符?(除了空格、换行符、制表符等) 如果答案是正则表达式:有人可以提供一个完整的正则表达式吗?
谢谢!

4
控制字符存在什么问题?我假设它们适合于文件本身。 - Lazarus
该程序使用不同的解析器(如word、pdf等),处理纯文本和xml文件。有时,(提取的)“正文”/内容字符串仍然包含烦人的字符,比如“f0e8”。因此,我必须自己将它们删除。 - Mimefilt
是的,提取器不能删除所有的“设计”字符。但我无法更改它。 - Mimefilt
请参考此处的“Unicode字符属性”部分以备将来参考:http://www.regular-expressions.info/unicode.html - Geoffrey
2个回答

17

尝试

resultString = Regex.Replace(subjectString, "\p{C}+", "");

这将从你的字符串中删除所有“其他”Unicode字符(控制字符、格式字符、私用字符、代理字符和未分配字符)。


非常感谢:D 运行得很好!我希望它不会太多地减慢进程。 - Mimefilt
为什么在Visual Basic中不接受@符号?我在@处得到“表达式期望”的错误。 - Geoffrey
1
抱歉,我忽略了VB部分,并且对.NET标签的第一反应是提供一个C#代码片段。我会进行编辑。谢谢! - Tim Pietzcker
有没有一个概述,说明 "\p{C}+" 会删除哪些字符?谢谢! - Mimefilt
1
请查看http://www.unicode.org/charts/,向下滚动到底部并查看最右侧的列。 - Tim Pietzcker
请点击此处查看C#版本:https://dev59.com/31kR5IYBdhLWcg3w9Ryt#40568888 - Jpsy

0
这是控制字符的POSIX正则表达式:[:cntrl:],取自维基百科上的Regular Expression

4
Posix 已经过时,让它安息吧。 - Hans Passant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接