【问题标题】:Textpipe: extracting text between two tagsTextpipe:提取两个标签之间的文本
【发布时间】:2011-12-31 11:35:26
【问题描述】:

我这辈子都不知道如何使用 TextPipe 完成这项任务。

任务:

提取(剪切)此文本包括开始和结束标记,并得到一个仅包含这些标记和中间文本的文件。

<div><div class="article">`TEXT`<span id="contentBottomLeft"></span>

我定义了一个带有结束和开始标记的限制过滤器,但接下来是什么?这个过滤器需要一个子过滤器,我不明白接下来我需要使用什么确切的过滤器以及如何自定义它。我需要对数千个 HTML 文件重复此提取过程。

非常感谢 TextPipe 的步骤,因为我自己并不是一个程序员。

【问题讨论】:

  • 好吧,'谢谢'你没有回答。我知道 HTML,但这就是它在原始 HTML 文件中的显示方式,此外我还需要一些唯一标识符来提取特定的文本。
  • 你是说文件已经不平衡了,需要去掉两个虚假的
    开始标签?
  • 我是说我一开始不明白它的相关性;这是对一系列大量下载的 HTML 文件执行的操作,这恰好是我需要的 HTML 文件中的一段文本的唯一起点。为了确保这一点,我包含了“原样”的标签。对于我的目的,双 div 无关紧要。我需要做的就是删除第一个标签之前和最后一个标签之后的所有文本,从而保持上面的字符串与中间的唯一文本。
  • 啊啊!因此,“提取(剪切)”是指您希望仅保留出现在该上下文中的文本和标签?
  • 完全正确:) 然后在其他一千个文件上运行脚本。

标签: html text tags extraction


【解决方案1】:

使用 TextPipe 非常简单,顺便说一句,它很棒。

添加 perl 搜索和替换模式过滤器,搜索文本为:

<div><div class="article">[^<]*<span id="contentBottomLeft"></span>
  • 在这里,TEXT 可以是除“

将替换文本设置为:

$0\r\n

然后,只需检查搜索/替换过滤器的“提取匹配项”选项。

最后,在输出过滤器中,使用“单文件输出”作为目标文件名。

【讨论】:

  • 非常有建设性的回答!欢迎使用 StackOverflow。
【解决方案2】:

没有任何进一步的帮助,我只能猜测你想删除所有

元素,其第一个子元素是另一个
元素,其类属性等于“article”。

快速查看TextPipe documentation 后,它看起来不会像 XPath 表达式那样做任何事情,但您应该尝试使用 Restrict to between tags 过滤器和 Remove All 子过滤器。

请记住,TextPipe 可能无法满足您的需求,您可能不得不在其他地方寻找解决方案。

【讨论】:

  • 是的,感谢您的意见。不过,我确信 TextPipe 可以做到这一点,但这样做的方式让我感到困惑,因为程序围绕过滤器和子过滤器发展,我不太确定在限制过滤器之后使用哪一个。此外,我认为您对此的了解太多了,此任务仅涉及剪切具有预设起点和终点的特定块。目的是使用正则表达式对结果文本进行进一步后处理。
  • 对,所以我将简要说明此任务的解决方案,以便其他人也从中受益。在“查找”字段中,定义一个 Perl 模式:&lt;div&gt;&lt;div class="article"&gt;(.*?)&lt;span id="contentBottomLeft"&gt; 并选择“将不匹配的文本发送到子过滤器”然后为 Perl 模式创建一个“删除所有”子过滤器。这将产生一个带有 only 的文本文件(周围没有其他文本):&lt;TAG1&gt; Text &lt;TAG2&gt;
猜你喜欢
相关资源
最近更新 更多
热门标签