我从网站上提取一些信息。
不幸的是,代码非常有条理,一些代码片段(XML和样式)出现在HTML结构的中间。
我使用Java将所有HTML代码放在一个字符串中,我想摆脱这样的事情:
<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]-->
(此代码显示在页面的一部分中......)
或更复杂的,如:
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0in;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-fareast-language:EN-US;}
</style>
<![endif]-->
也出现在同一页面上。
我注意到了if和endif标签,所以我尝试使用replaceall函数删除包含该模式的字符串的每个部分。
我使用以下模式:
html = html.replaceAll("(<!--(.*)-->)*?", "");
我也试过这个:
html = html.replaceAll("(<!--(.*)-->)", "");
html = html.replaceAll("(<!--(.*)<!\\[endif\\]-->)", "");
它们非常模糊,但我尝试过的其他变体根本不起作用。
不幸的是,这些都不起作用,因为他们只删除了第一个,但大的那个仍在那里...
我做错了什么?
答案 0 :(得分:1)
您需要使正则表达式与换行符匹配。
html = html.replaceAll("(?s)<!--.*?-->", "");