【问题标题】:RegEx help needed with HTML tags extraction提取 HTML 标记需要 RegEx 帮助
【发布时间】:2023-04-02 17:20:01
【问题描述】:

我需要提取这段文字:

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

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

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

【问题讨论】:

标签: html regex


【解决方案1】:

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

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

【讨论】:

  • “你也应该看看 dasbinkenlight 的链接”——哦,是的。不容错过!
【解决方案2】:

您可以使用正则表达式替换来删除所有 html 标签( 中的任何文本),但在您的示例中,您将留下&amp;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 列出文件夹中的所有文件”。

【讨论】:

    【解决方案3】:

    您可以使用 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) 等命令,以获取有关访问多个输入文件的帮助。

    【讨论】:

    • 我不能完全验证这个答案,但为了清晰和额外资源而投票。
    猜你喜欢
    • 2011-11-05
    • 2014-10-31
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    相关资源
    最近更新 更多