删除2个字符串(html标签)之间的文本

时间:2015-05-05 09:38:29

标签: html regex batch-file

我想从大文本文件中删除一些文本。 重点是找到一个字符串(html标签)并删除所有文本,直到标签结束。

这就是我试图做的事情:

C:\>type sample.txt | findstr /r /<tag+[^?]+<\/tag>/g

但是它没有用。

2 个答案:

答案 0 :(得分:1)

此脚本(使用.bat扩展名保存)接受一个参数--html文件。它将在控制台中打印(可以重定向到文件)已删除的文件内容 节点。 不确定是否要删除字体标记及其中的内容或仅删除标记:

@if (@X)==(@Y) @end /* JScript comment 
        @echo off 



        cscript //E:JScript //nologo "%~f0"  %* 
        exit /b %errorlevel% 
@if (@X)==(@Y) @end JScript comment */ 

var ARGS = WScript.Arguments; 
var file=ARGS.Item(0);

var FileSystemObj = new ActiveXObject("Scripting.FileSystemObject"); 
//var objXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP")
//objXMLHTTP.open("GET", file);
//objXMLHTTP.sent();

var readFile=FileSystemObj.OpenTextFile(file,1);
var content=readFile.ReadAll();

var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
var oSelection;
xmlDoc.setProperty("SelectionLanguage", "XPath");
xmlDoc.async = false;
xmlDoc.loadXML(content);

if (xmlDoc.parseError.errorCode != 0) {
   var myErr = xmlDoc.parseError;
   WScript.Echo("You have error " + myErr.reason);
} else {
   //WScript.Echo("Before removing <font> nodes:\n" + xmlDoc.xml + "\n");
   oSelection = xmlDoc.selectNodes("//font");
   oSelection.removeAll();
   //WScript.Echo("After removing <font> nodes:\n" + xmlDoc.xml + "\n");
   WScript.Echo(xmlDoc.xml);
}


//var doc=objXMLHTTP.responseXML;
//var tags=doc.oXMLDOMElement.getElementsByTagName("font");
//var selection=doc.selectNodes("//font")
//WScript.Echo(tags.Length);
//selection.removeAll()

答案 1 :(得分:1)

这是另一个类似于npocmaka解决方案的选项。它使用htmlfile COM对象,而不是使用要求HTML严格有效的XML DOM。此方法不需要像XML解析器那样关闭所有标记。缺点是htmlfile COM对象对代码做了一些奇怪的事情 - 将所有标记名称大写,从参数周围删除引号,删除XHTML-ish <element />自闭合斜杠等等。但是,修改后的页面仍应呈现相同的内容。

此脚本将覆盖您要修改的文件。

@if (@CodeSection == @Batch) @then

@echo off
setlocal

set "htmlfile=test.html"

cscript /nologo /e:Jscript "%~f0" "%htmlfile%"

goto :EOF

@end // end batch / begin JScript chimera

var DOM = WSH.CreateObject('htmlfile'),
    fso = WSH.CreateObject('Scripting.FileSystemObject'),
    file = fso.OpenTextFile(WSH.Arguments(0), 1),
    html = file.ReadAll(),
    doctype = (html.replace(/\r?\n/g,'').match(/<!doctype.*?>/i) || [''])[0];

file.Close();
DOM.write(html);

var del = DOM.getElementsByTagName('font');

for (var i=del.length; --i>-1;)
    del[i].parentNode.removeChild(del[i]);

file = fso.CreateTextFile(WSH.Arguments(0), true);
file.Write((doctype ? doctype + '\n' : '') + DOM.documentElement.outerHTML);
file.Close();
DOM.close();