现在试图解决这个问题。
我需要一个正则表达式去除下面示例中演示的html标记之间的换行符,制表符和空格:
来源:
<html>
<head>
<title>
Some title
</title>
</head>
</html>
通缉结果:
<html><head><title>Some title</title></head></html>
在“Some title”之前修剪空白是可选的。 我很感激任何帮助
答案 0 :(得分:20)
如果HTML是严格的,请使用XML阅读器加载它并将其写回而不进行格式化。这将保留标签内的空白,但不保留它们之间的空白。
答案 1 :(得分:1)
\ d仅与Perl 5.8和5.10中的[0-9]不匹配;它匹配任何具有digit属性的UNICODE字符(包括“\ x {1815}”和“\ x {FF15}”)。如果你的意思是[0-9]你必须使用[0-9]或使用字节编译指示(但是它会以1个字节的字符转换所有字符串,通常不是你想要的)。
正则表达式在解析HTML方面根本不好(请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?了解原因)。你需要的是一个HTML解析器。有关使用各种解析器的示例,请参阅Can you provide an example of parsing HTML with your favorite parser?。
您可能会发现HTMLAgilityPack answer有帮助。
答案 2 :(得分:0)
试试这个:
s/[^\w\/\d<>]+/gs
答案 3 :(得分:0)
s/>\s+</></gs
答案 4 :(得分:0)
s/\s*(<[^>]+>)\s*/\1/gs
或者,在c#中:
Regex.Replace(html, "\s*(<[^>]+>)\s*", "$1", RegexOptions.SingleLine);
答案 5 :(得分:0)
这将删除标记之间的空格以及标记和文本之间的空格。
s/(\s*(<))|((>)\s*)/\2\4/g
答案 6 :(得分:0)
Regex.Replace(input, "<[^>]*>", String.Empty);
答案 7 :(得分:0)
使用XSLT的解决方案如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="no"/>
<xsl:template match="*|@*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<!-- trim whitespaces from the content -->
<xsl:template match="text()">
<!-- remove from tag to content -->
<xsl:variable name="trimmedHead" select="replace(.,'^\s+','')"/>
<xsl:variable name="trimmed" select="replace($trimmedHead,'\s+$','')"/>
<xsl:value-of select="$trimmed"/>
</xsl:template>
<!-- do not trim where text content exist -->
<xsl:template match="text()">
<xsl:if test="not(matches(.,'^\s+$'))">
<xsl:value-of select="."/>
</xsl:if>
</xsl:template>
您可以选择要使用的模板。当内容存在时,第一个删除所有空格,第二个仅在只有空格或换行符时删除。
答案 8 :(得分:-1)
我想保留新行,因为删除换行符会弄乱我的HTML。所以我选择以下内容。
private static string ProcessHTMLFile(string input)
{
string opt = Regex.Replace(input, @"( )*", "", RegexOptions.Singleline);
opt = Regex.Replace(opt, @"[\t]*", "", RegexOptions.Singleline);
return opt;
}