如何从句子中删除多余的空格、制表符和换行符,并仅用一个空格替换它们? [复制]

Posted

技术标签:

【中文标题】如何从句子中删除多余的空格、制表符和换行符,并仅用一个空格替换它们? [复制]【英文标题】:How do I remove extra spaces, tabs and line feeds from a sentence and substitute them with just one space? [duplicate] 【发布时间】:2011-07-29 04:36:10 【问题描述】:

可能重复:remove multiple whitespaces in php

我有一个字符流,一个句子或一个段落,其中可能在两个单词甚至制表符或换行符中有多余的空格,我该如何删除所有这些并用一个空格替换它们。

【问题讨论】:

这个问题怎么能跳过我的眼睛?谢谢沙克蒂 :-) 这个问题与@Shakti 标记为重复的问题不太一样。不过,或许这只是个误会。您希望 single 制表符或换行符发生什么?他们应该一个人呆着吗?多个标签应该变成一个标签,还是应该变成一个空白?混合制表符、空格、换行符等呢? @Tim Pietzcker,我想将所有空格、制表符和换行符转换为一个空格,这样我就可以explode() 使用空格作为分隔符的句子。 所以您的意思是“转换为空格”(ASCII 32)而不是“空白”(空格、换行符、制表符、换页符等)。好的。那么 jeroen 的解决方案就是适合您的解决方案。 好吧,空格不是= ASCII 32空格吗?如果我错了,请纠正我。我不想要非中断(白色)空间。 【参考方案1】:

您可以使用如下正则表达式:

preg_replace("/\s+/", " ", $string);

这应该用一个替换所有多个空格、制表符和换行符。

Thanks to @ridgerunner 的建议 - 如果您添加 'S' 研究修饰符,它会显着加快:

preg_replace('/\s+/S', " ", $string);

'S'helps "non-anchored patterns that do not have a single fixed starting character" - i.e. a character class.

【讨论】:

还有制表符和换行符?我需要通过多个正则表达式运行我的文本输入吗? @Kumar,不,\s 中包含制表符和换行符。 @Tim Pietzcker 感谢您的补充,我忘了明确提及制表符和换行符。 +1 如果您希望它运行得更快,请添加'S' study 修饰符:'/\s+/S'。 ('S' 帮助 “没有单个固定起始字符的非锚定模式” - 即字符类。) @ridgerunner 谢谢,我不知道。

以上是关于如何从句子中删除多余的空格、制表符和换行符,并仅用一个空格替换它们? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

c#如何去除字符串中的空格,回车,换行符,制表符

c#如何去除字符串中的空格,回车,换行符,制表符

给定一个单词之间有多个空格的句子。删除多余的空格,使句子在单词之间只有一个空格[重复]

怎么从字符串中删去空格和换行符

使用 Python 从 MySQL 列中删除空格

删除 Eclipse 中单行注释中多余的前导空格