HTML标记提取需要RegEx帮助

时间:2012-06-17 17:11:20

标签: html regex

我需要提取这段文字:

Line 1 text.
Line 2 text. Line 2 some more text.
Line 3 text,
Line 4 text

来自这个HTML:

...
<tr><td class="td_my_custom_text">Line 1 text. 
<br>Line 2 text. Line 2 some more text.
<br>Line 3 text, 
<br>Line 4 text
<br></td></tr><tr><td>&nbsp;</td></tr>
...

使用此RegEx:<td\ class="td_my_custom_text">[\s\S]*?</td>我设法收到了一些但距离不够近的地方。 <td class="td_my_custom_text"><br></td>仍然在里面,我被困住了。

  1. 我的正则表达式需要改变什么才能摆脱它们?
  2. 是否有一些Windows工具可以自动执行此作业并将提取的数据复制到新文件中?我有5000多个像这样的文件,我正在考虑使用正则表达式或html解析器创建一个小程序,但我想先知道是否有更好的方法。

3 个答案:

答案 0 :(得分:2)

看起来你最好不要剥离标签,因为这基本上就是你正在做的事情。

您还应该在评论中查看dasbinkenlight的链接,以了解有关HTML解析的更多信息。

答案 1 :(得分:2)

您可以使用正则表达式替换删除所有html标记(&lt;&gt;中的任何文本),但在您的示例中,您将留下&nbsp;。最好的方法是HTML解析器。根据您的编程语言,您可以使用库。

您可以尝试使用FakeRainBrigand的方法,甚至可以将其调整为VBScript:创建.vbs文件并添加以下测试代码:

Set objIE = CreateObject("internetexplorer.application")

strHTML = "<tr><td class='td_my_custom_text'>Line 1 text. <br>Line 2 text.<br></td></tr><tr><td>&nbsp;</td></tr>"

objIE.navigate("about:blank")
objIE.document.body.innerHTML = strHTML

msgbox objIE.document.body.innerText

保存文件。打开时,它会出现一个带有解析HTML的消息框。然后,您可以使用Scripting.FileSystemObject列出文件夹中的所有文件,并一次处理一个文件。有几个例子说明如何做到这一点 - 例如VBScript to detect today's modified files in a folder (including subfolders inside it)其他示例,如果你谷歌“VBS列出文件夹中的所有文件”。

答案 2 :(得分:1)

您可以使用Internet Explorer的COM界面。使用语言AutoHotkey_L

ex_html =
(
<tr><td class="td_my_custom_text">Line 1 text. 
<br>Line 2 text. Line 2 some more text.
<br>Line 3 text, 
<br>Line 4 text
<br></td></tr><tr><td>&nbsp;</td></tr>
)


pwb := ComObjCreate("InternetExplorer.Application")
pwb.navigate("about:blank")
pwb.document.body.innerHTML := ex_html
text := pwb.document.body.innerText
pwb.quit()


MsgBox % text

导航到空白页面,注入HTML代码,然后使用innerText DOM属性清除所有特殊标记。

在循环中运行innerHTML和innerText行可以快速清理所有HTML输入。阅读FileReadLoop (files & folders)等命令,获取有关访问多个输入文件的帮助。