使用正则表达式修剪html

一直试图解决这个问题。

我需要一个正则表达式去除下面示例中演示的html标记之间的换行符,制表符和空格:

资源:

   Some title    

通缉结果:

 Some title 

在“一些标题”之前修剪空白是可选的。 我会感激任何帮助

s/\s*(<[^>]+>)\s*/\1/gs

或者,在c#中:

Regex.Replace(html, "\s*(<[^>]+>)\s*", "$1", RegexOptions.SingleLine);

如果HTML是严格的,请使用XML阅读器加载它并将其写回而不进行格式化。 这将保留标签内的空白,但不保留它们之间的空白。

\ d仅与Perl 5.8和5.10中的[0-9]不匹配; 它匹配具有digit属性的任何UNICODE字符(包括“\ x {1815}”和“\ x {FF15}”)。 如果你的意思是[0-9],你必须使用[0-9]或使用字节编译指示(但它会以1个字节的字符转换所有字符串,通常不是你想要的)。

正则表达式在解析HTML方面基本上是不好的(参见你能提供一些为什么难以用正则表达式解析XML和HTML的例子吗? )。 你需要的是一个HTML解析器。 请参阅您是否提供了使用您喜欢的解析器解析HTML的示例? 例如,使用各种解析器。

您可能会发现HTMLAgilityPack答案很有帮助。

s/>\s+

这将删除标记之间的空格以及标记和文本之间的空格。

 s/(\s*(<))|((>)\s*)/\2\4/g 
 Regex.Replace(input, "<[^>]*>", String.Empty); 

试试这个:

 s/[^\w\/\d<>]+/gs 

使用XSLT的解决方案如下所示:

                      

您可以选择要使用的模板。 当内容存在时,第一个删除所有空格,第二个仅在只有空格或换行符时删除。

我想保留新的行,因为删除换行符会弄乱我的HTML。 所以我选择以下内容。 。

 private static string ProcessHTMLFile(string input) { string opt = Regex.Replace(input, @"( )*", "", RegexOptions.Singleline); opt = Regex.Replace(opt, @"[\t]*", "", RegexOptions.Singleline); return opt; }