【问题标题】:Remove non printable string删除不可打印的字符串
【发布时间】:2024-12-16 21:00:01
【问题描述】:

我对 pdf 图像进行了 OCR 并提取了文本。 出于某种原因,OCR 已将单个空格转换为双回车换行。

例如。

"\r\n\r\n"

以下不起作用,因为我认为我的 4 个字符并不是真正的搅拌,而是 4 个不可打印的字符。

DocumentData = DocumentData.Replace(@"\r\n\r\n", "");

我只想在这 4 个不可打印字符一起出现时用空格替换它们。

如何不费吹灰之力实现这一点。

【问题讨论】:

  • 如果它们不可打印,请删除@ - 它是一个逐字字符串,然后按照 sakura 写的 - " "

标签: c# string str-replace non-printing-characters


【解决方案1】:

问题在于“@”的用法。通过在文本前面加上它,转义将被忽略。只需使用 -

DocumentData = DocumentData.Replace("\r\n\r\n", " ");

【讨论】:

  • 这是错误的,因为您没有将space 添加到字符串中。
  • 现在按照原帖的要求进行了修改。
【解决方案2】:

这是你想要的吗?

DocumentData = DocumentData.Replace("\r\n\r\n", " "); // <-- change "" to " ", remove @ char

【讨论】:

  • 他应该去掉字符串前面的@
【解决方案3】:

如果您想确保您(或发件人)在哪个系统上运行并不重要,并且您将始终捕获不可打印的内容,我将使用 Regular Expressions

DocumentData = Regex.Replace(DocumentData, @"\r\n?|\n|\r|\s+", " ");

编辑:使表达式更加健壮,并检查是否有多余的空格将它们替换为单个空格,这将避免替换后的间距过大,因此它特定于这个问题。我的错。

【讨论】:

  • 谢谢,我确实最终使用了正则表达式,但我不是这方面的专家。我的模板略有不同,它是@"\r\n\r\n"。仅替换同时出现所有 4 个不可打印字符的位置。你不会也替换单个 "\r\n" 和单个 "\r" 和单个 "\n" 出现吗? "\s+" 有什么作用?
  • @user1413844 - 它从字符串中删除多个空格。它在那里是因为这个正则表达式方法强制找到每个字符并用空格替换,这样你就得到了倍数。但是添加 \s+ 可以解决此问题,因为同一命令还将检查多个空格并用单个空格替换它们
最近更新 更多