如何使用正则表达式从字符串中删除额外的回车和空格?

13

我要将 HTML 代码转换为纯文本。但是会有很多额外的换行和空格,该如何去除它们呢?


听起来很明显,但如果仅仅替换空格和回车并不能让你的HTML看起来足够优美,那么你可以考虑使用HTML格式化工具 - Ivan Ferrer Villa
4个回答

18

谢谢,那么回报怎么样? - Shisoft
我真的很喜欢你去掉空格的方式;-) - Mohammad M. Ramezanpour
1
"\s" 是空格、换行符、制表符和换页符(以及某些实现中的其他空白字符)的简写,因此它将删除这些回车并将它们转换为单个空格。 - Tim Pietzcker

16

我假设你想要

  • 查找两个或更多连续的空格并将其替换为一个空格,以及
  • 查找两个或更多连续的换行符并将其替换为一个换行符。

如果是这样,你可以使用以下代码:

resultString = Regex.Replace(subjectString, @"( |\r?\n)\1+", "$1");

这将保留原始的空白符类型,同时还可以正确地保留Windows换行符。如果您还想将多个制表符“压缩”为一个,请使用

resultString = Regex.Replace(subjectString, @"( |\t|\r?\n)\1+", "$1");

要将一串换行符和空格(任意数量)压缩成一个单独的换行符,请使用

resultString = Regex.Replace(subjectString, @"(?:(?:\r?\n)+ +){2,}", @"\n");

+1 表示保留新行,仅折叠相同类型的重复内容。 - John McDonald
好的,但是还有一种情况无法解决。例如\n \n \n \n \n \n \n \n \n \n返回的结果会混合空格。 - Shisoft
@Tim Pietzcker 我想把连续的空格转换成 " ",连续的回车转换成 "\n",然后将带有空格的回车(例如 \n\n \n\n \n\n \n)转换为 "\n"。注意:"\n"之间可能会有多个空格。 - Shisoft
我已经为这种情况添加了另一个正则表达式;这个正则表达式必须在另一个正则表达式之前或之后应用。 - Tim Pietzcker
(.NET) 如果你想要保留包含在\s中的换行符,请使用[ \t]代替\s。 //删除多个回车符 txt = Regex.Replace(txt, @"( |\r?\n)\1+", "$1"); //删除重复的空格或多个制表符<!-- language: c# --> txt = Regex.Replace(txt, @"[ \t]+", " "); //删除空行或由空格和制表符组成的行 txt = Regex.Replace(txt, @"^[ \t]+$[\r\n]*", "", RegexOptions.Multiline).Trim(); - Allen
显示剩余4条评论

0
我为此使用了很多算法。每个循环都很好,但这个是明显而绝对的。
//define what you want to remove as char

char tb = (char)9; //Tab char ascii code
spc = (char)32;    //space char ascii code
nwln = (char)10;   //New line char ascii char

yourstring.Replace(tb,"");
yourstring.Replace(spc,"");
yourstring.Replace(nwln,"");

//by defining chars, result was better.

-2

您可以使用Trim()函数来去除空格和回车。在HTML中,空格并不重要,因此您可以通过使用System.String类中的Trim()方法来省略它们。


1
我认为 trim 只能删除开头和结尾的空格。 - Shisoft
实际上,只支持前导和尾随字符:http://msdn.microsoft.com/en-us/library/system.string.trim.aspx。+1 建议提供替代方案,也许可以扩展这个想法为 OP 提供一个无正则表达式的解决方案? - Grant Thomas
您可以删除空格,还可以删除其他您想要删除的字符。如果您想要删除回车符,我认为最好的方法是使用这个: "Your Html".Trim('\n') - Mohammad M. Ramezanpour
2
重点是,它只会从字符串的开头结尾删除它们。 OP 正试图在整个字符串中折叠空格。Trim可能有用,但它不能完成整个工作。 - Alan Moore

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