-1

我需要提取此文本:

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>
...

使用这个正则表达式:<td\ class="td_my_custom_text">[\s\S]*?</td>我设法得到了一些接近但还不够接近的东西。<td class="td_my_custom_text"><br>并且</td>还在里面,我被卡住了。

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

3 回答 3

2

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

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

于 2012-06-17T17:29:46.820 回答
2

您可以使用正则表达式替换来删除所有 html 标签(< > 中的任何文本),但在您的示例中,您将留下&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 检测文件夹(包括其中的子文件夹)中今天修改过的文件,如果您在谷歌上搜索“VBS 列出文件夹中的所有文件”,还有其他示例。

于 2012-06-17T18:30:20.777 回答
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 代码,然后使用innerTextDOM 属性清除所有特殊标记。

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

于 2012-06-17T17:53:59.437 回答