【问题标题】:Regex Match All Characters Between Tags on nth occurrence正则表达式匹配第 n 次出现的标签之间的所有字符
【发布时间】:2015-07-17 01:17:38
【问题描述】:

我需要匹配两个标签之间的文本,但从标签的特定位置开始。

想象一下这段文字:

Some long <br> text goes <br> here. And some <br> more can <br> go here.<br>

在我的例子中,我想在这里匹配 。还有一些。 我成功地将第一次出现之间的文本(第一个和第二个 br 标签之间)与:

<br>(.*?)<br>

但我正在寻找下一个匹配中的文本(将在第二个和第三个 br 标签之间)。这可能比我意识到的更明显,但 Regex 不是我的强项。

【问题讨论】:

  • 你的平台是什么?而且,更重要的是,您使用正则表达式解析 HTML 的理由是什么?
  • 我正在使用 chrome 中的数据抓取扩展程序,并且我正在收集存储在单个 元素中的地址数据,该元素由每个地址组件的
    分隔。这会因站点而异,因此我只需要一种快速的方法来在任何给定站点上获取我需要的内容,然后继续前进。
  • 所以您使用的可能是地球上功能最强大的 HTML 解析器,但您认为正则表达式是一种快速前进的方式?如果您使用的平台没有适当的 HTML 解析器(可能是文本编辑器),那将很重要。但在 Chrome 中,它没有。如果你到目前为止分享你的代码,我会向你展示一种解决这个问题的方法。
  • 我正在使用Web Scrapper 扩展。它成功抓取了我正在查看的文本,但随后显示为:&lt;a action="some_action" class="some_name" recnum="1" href="javascript:void(0);"&gt;My Company Title&lt;/a&gt;&lt;br&gt; &lt;strong class=""&gt;(999) 999-9999&lt;/strong&gt;&lt;br&gt; First Avenue Lane&lt;br&gt; Somwhere, II 00000&lt;br&gt;
  • 看起来像是text selector 的工作。它将在内部将&lt;br&gt; 转换为\n,并将所有可能的HTML 字符实体转换为实际字符。之后在\n 上拆分纯文本是对正则表达式的一种很好的使用。

标签: regex html-parsing


【解决方案1】:

只需扩展您的正则表达式:

<br>(.*?)<br>(.*?)<br>

或者,对于无限数量的匹配,并修剪空格:

<br>\s*(.*?)(?=\s*<br>)

编辑:现在我看到您正在解析 HTML 文档,请注意正则表达式可能不是该工作的最佳工具,尤其是在您的解析要求很复杂的情况下。

【讨论】:

  • 请不要提供正则表达式 HTML 解析建议。教人们如何使用解析器比向他们扔正则表达式更有帮助,因为这些正则表达式适用于给出的示例并且在现实生活中不可避免地会崩溃。
  • @Tomalak 当我回复时,HTML 标记不见了。但我会在我的回复中添加评论。
猜你喜欢
相关资源
最近更新 更多
热门标签